حدد COUNT () من قواعد بيانات متعددة في SQL
سؤال
وأنا محاولة لإرجاع عدد من العملاء تقع في دولة معينة قد استأجر فيلم معين، حيث يحتوي الجدول الإيجارات عمودين، واحدة للهوية العميل واحد لل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