2013-03-12 2 views
1

Я пытаюсь перечислить запрос, если в таблице указаны два типа продуктов. Это то, что я имею в моей базе данных:MySQL duplicate query

table1

productID  
productDescription 
productYear 

table2

porductID2 
productDescription 
productID (foreign Key from table1) 

Таблица 1 имеет:

01, Ball, 2001 
02, Cone, 2002 
03, Cube, 2010 

Таблица 2 имеет

01, BallBaring, 01 
02, LittleBall, 01 
03, BallBaring, 02 
04, LittleBall, 02 
05, BallBaring, 03 

Я пытаюсь показать только те результаты, которые содержат BallBaring AND LittleBall. Поэтому при поиске результатов показывает только результаты, содержащие BallBaring И LittleBall: У меня есть следующий поиск:

SELECT table2.productDescription, table1.productDescription, table2.productID2 
FROM table1, table2 
WHERE table1.productID = table2.productID2 
    AND (table2.productDescription = 'LittleBall' 
     OR table2.productDescription = 'BallBaring'); 

Но это возвращает все продукты, которые имеют либо BallBaring или LittleBall вместо только те, которые имеют как BallBaring И LittleBall, если я делаю AND вместо OR, он ничего не возвращает.

ответ

1

Похоже, вы присоединяетесь к productID2 вместо внешнего ключа (productID). Это должно работать:

SELECT b.productDescription, a.productDescription, b.productID2 
FROM table1 a 
JOIN table2 b ON b.productID = a.productID 
WHERE b.productDescription IN ('LittleBall', 'BallBearing') 

Результат

| PRODUCTDESCRIPTION | PRODUCTDESCRIPTION | PRODUCTID2 | 
--------------------------------------------------------- 
|   LittleBall |    Ball |   2 | 
|   LittleBall |    Cone |   4 |

See the demo

+0

я, кажется, чтобы получить все результаты, которые имеют либо LittleBall и BallBaring. Поэтому результатом того, что я хочу, является то, что BallBaring должен быть включен в результат, где Table1 имеет и BallBaring, и LittleBall из Table2, надеюсь, вы поймете. Спасибо за ваш очень быстрый ответ. – Dino

1

Эта проблема называется Relational Division, где вы ищете конкретное значение, которое соответствует всем условиям.

SELECT a.* 
FROM table1 a 
     INNER JOIN 
     (
      SELECT productID 
      FROM table2 
      WHERE productDescription IN ('BallBaring', 'LittleBall') 
      GROUP BY productID 
      HAVING COUNT(*) = 2 
     ) b ON a.productID = b.productID 

ВЫВОД

╔═══════════╦════════════════════╦═════════════╗ 
║ PRODUCTID ║ PRODUCTDESCRIPTION ║ PRODUCTYEAR ║ 
╠═══════════╬════════════════════╬═════════════╣ 
║   1 ║ Ball    ║  2001 ║ 
║   2 ║ Cone    ║  2002 ║ 
╚═══════════╩════════════════════╩═════════════╝