كيف تصنع استعلام متداخل؟
-
23-09-2019 - |
سؤال
اجعل مستخدمي الجدول وهناك حقل مدعو _BY_ID يعرض معرف المستخدم للشخص الذي دعا هذا المستخدم. تحتاج إلى جعل صفوف استعلام MySQL مع جميع الحقول من المستخدمين بالإضافة إلى حقل invites_count يوضح عدد الأشخاص الذين تمت دعوتهم من قبل كل مستخدم. شيء من هذا القبيل:
SELECT
User.*, Count.count
FROM
users AS User,
(
SELECT COUNT(*) AS count FROM users WHERE users.invited_by_id=User.id
) AS Count;
هذا لا يعمل ، لذا أحتاج إلى عمل عمل.
المحلول
SELECT u.*,
(
SELECT COUNT(*)
FROM users ui
WHERE ui.invited_by_id = u.id
) AS cnt
FROM users u
نصائح أخرى
حسنًا ، أولاً وقبل كل شيء ، count
هي كلمة محفوظة في SQL ، لذا لا يمكنك استخدامها كمستعار للجدول (إلا إذا اقتبدت منها بطريقة ما ولكن لا تفعل ذلك). ثانياً ، الطريقة الحقيقية لحل هذه المشكلة هي تقديم أ GROUP BY
بند في انبعاثك الفرعي.
جرب هذا:
SELECT user3.*, subquery.theCount FROM
users AS user3
INNER JOIN (
SELECT
user1.id, count(user2.id) AS theCount
FROM
users AS user1
LEFT OUTER JOIN
users AS user2 ON user2.invited_by_id=user1.id
GROUP BY user1.id
) AS subquery ON subquery.id=user3.id;
إليكم سرًا صغيرًا قذرًا عن MySQL: إنه يتيح لك الغش مع GROUP BY
بيان وحدد الأعمدة غير الموجودة في GROUP BY
قائمة وأيضًا ليس في وظائف إجمالية. RMDMSEs الأخرى لا تسمح لك بذلك.
SELECT
user1.*, count(user2.id) AS theCount
FROM
users AS user1
LEFT OUTER JOIN
users AS user2 ON user2.invited_by_id=user1.id
GROUP BY user1.id;
لا تنتمي إلى StackOverflow