【发布时间】:2010-11-12 10:02:48
【问题描述】:
我一直想弄清楚如何编写查询。基本上我有三个表(Orders、Products、Orders_Products),我想将它们连接在一起并应用一些过滤。
Orders table:
ORDER_ID CUSTOMER_ID
1 1
2 2
Products table:
PRODUCT_ID PRODUCT_NAME PRODUCT_TITLE
1 'P1' 'T1'
2 'P1' 'T2'
3 'P2' 'T3'
4 'P2' 'T4'
5 'P2' 'T5'
6 'P3' 'T6'
Orders_Products table:
ORDER_ID PRODUCT_ID
1 1
1 3
2 1
2 3
2 6
例如,我想获取所有包含(完全)产品 P1/T1 和 P2/T3 的订单。我尝试了类似的方法,但它不起作用:
SELECT * FROM Orders
LEFT JOIN Orders_Products ON Orders_Products.ORDER_ID = Orders.ORDER_ID
LEFT JOIN Products ON Orders_Products.PRODUCT_ID = Products.PRODUCT_ID
WHERE EXISTS (SELECT * FROM Product WHERE PRODUCT_NAME = 'P1' AND PRODUCT_TITLE = 'T1')
AND EXISTS (SELECT * FROM Product WHERE PRODUCT_NAME = 'P2' AND PRODUCT_TITLE = 'T3');
编辑:澄清我真正必须实现的目标。用户应该能够搜索与给定产品匹配的订单。用户输入一个或多个产品名称/产品标题组合,并获得与该产品完全相关的所有订单。我(从 Web 应用程序)得到的只是名称/标题组合,我必须在查询中使用这些组合来获取 ORDER_ID。
【问题讨论】:
-
你使用什么风格的 SQL? SQL Server(如果有,是哪个版本)?
-
我正在使用 MySQL,但我想知道使用标准 SQL 是否无法完成某些事情?