سؤال

وأنا محاولة لإرجاع عدد من العملاء تقع في دولة معينة قد استأجر فيلم معين، حيث يحتوي الجدول الإيجارات عمودين، واحدة للهوية العميل واحد للID الفيلم. تأخذ الدالة في ID فيلم والدولة وتقوم بإرجاع عدد صحيح مع كمية من العملاء.

والآن لدي التنفيذ، ولكن يكون ذلك ضروريا تصل كمية الصفوف إرجاع الاستعلام كامل:

SELECT COUNT(*) as numCustomers FROM CUSTOMER C, RENTS R WHERE C.ST = '" + state + "' AND R.mid = " + movieID

وبعد ذلك عد كمية من الصفوف. وأود أن يكون مجرد قادرة على التحقق numCustomers للبيانات الصحيحة. شكرا!

هل كانت مفيدة؟

المحلول

أولا، كنت تعاني من نقص شرط لربط جدول الإيجارات وجدول العملاء الخاصة بك على الرقم التعريفي للعميل؟

وثانيا، يجب عليك استخدام INNER JOIN وظائف في عبارة FROM لاضافة جدولين.

وثالثا، يجب أن لا بناء SQL الخاصة بك كسلسلة من هذا القبيل كما أنك سوف تكون مفتوحة لحقن SQL.

وفي تخمين، هذا النوع من SQL قد يكون بعد على النحو التالي.

DECLARE @movieId int
DECLARE @state varchar(2)

SET @movieId = 12345
SET @state = 'NY'

SELECT
    COUNT(DISTINCT C.CustomerID) as numCustomers
FROM
    CUSTOMER C
INNER JOIN
    RENTS R
ON
    C.CustomerID = R.CustomerId
WHERE
    C.ST = @state
AND
    R.mid = @movieId

نصائح أخرى

والتخمين شيئا عن المخطط الخاص بك (كيف تتعلق الإيجارات إلى العميل):

SELECT COUNT(*) as numCustomers
FROM CUSTOMER c
WHERE
    c.ST = @State
    AND EXISTS
    (
        SELECT *
        FROM RENTS r
        WHERE r.CustomerID = c.CustomerID
        AND r.mid = @movieID
    )

وبالإضافة إلى ذلك، يجب عليك البحث هجمات حقن SQL، إذا كنت لم تكن مألوفة مع هذا الموضوع بالفعل.

لديك لربط العملاء والجداول تأجير وإلا فإنك سوف تحصل على إدخال كل دخول في كل جدول.

وماذا عن: SELECT COUNT(C.ID) AS numCustomers FROM CUSTOMER C, RENTS R WHERE C.ID = R.RenterID AND C.ST = '" + state + "' AND R.mid = " + movieID

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top