الجمع بين النقابات والحد من عمليات الاستعلام MySQL
سؤال
انا املك وظائف و شركات الجدول ، وأريد استخراج 20 وظيفة تفي بالمعايير التالية:
- وظائف فقط من شركتين (2)
- يمكن أن يكون هناك على الأكثر 10 وظائف لكل شركة
لقد جربت ما يلي SELECT
مع UNION DISTINCT
, ، لكن المشكلة هي أن LIMIT 0,10
ينطبق على مجموعة النتائج بأكملها. أريدها أن تنطبق على كل من الشركات.
إذا لم تكن هناك 10 وظائف لكل شركة ، فيجب أن يعيد الاستعلام جميع الوظائف التي يجدها.
SELECT c.name, j.title, j.`desc`, j.link
FROM jobs_job j
INNER JOIN companies_company c ON j.company_id = c.id
WHERE c.name IN ('Company1')
UNION DISTINCT
SELECT c.name, j.title, j.`desc`, j.link
FROM jobs_job j
INNER JOIN companies_company c ON j.company_id = c.id
WHERE c.name IN ('Company2')
ORDER by name, title
LIMIT 0,10
أنا جديد على MySQL ، لذلك أدرك أنه قد تكون هناك طريقة أكثر ذكاءً للقيام بذلك بدلاً من الاتحاد ، لذلك فإن أي اقتراحات للتحسينات هي بالتأكيد موضع ترحيب.
المحلول
اقتباس المستندات,
لتطبيق الطلب أو الحد من اختيار فرد ، ضع البند داخل الأقواس التي تحيط بـ SELECT:
(SELECT a FROM t1 WHERE a=10 AND B=1 ORDER BY a LIMIT 10)
UNION
(SELECT a FROM t2 WHERE a=11 AND B=2 ORDER BY a LIMIT 10);
لا تنتمي إلى StackOverflow