例如:在我的数据库中,我有3个表:COMPANY,COUPON和COMPANY_COUPON。 COMPANY表具有字段:ID和NAME,COUPON表具有:ID,TITLE和TYPE,COMPANY_COUPON表具有:COMPANies的ID和其拥有的COUPON的ID。
因此,在Java中,我使用以下命令来获取公司的所有优惠券:
SELECT coupon_id FROM company_coupon WHERE company_id = ?
并将其放入收藏夹中。
但是我需要一些东西来按类型获得公司的所有优惠券, 像这样:
SELECT * FROM company_coupon WHERE company_id = 1 AND coupon_id = (SELECT * FROM coupon WHERE type = camping)
当然这是行不通的,但是我正在寻找类似的东西。
我知道我可以获得公司的所有优惠券并将其放入“收藏夹”,然后删除所有不等于指定类型的优惠券,但是有什么方法可以通过SQL命令在数据库中执行此过程? >
答案 0 :(得分:2)
仅将one column
与IN
运算符一起使用
SELECT *
FROM COMPANY_COUPON
WHERE COMPANY_ID = 1
AND COUPON_ID IN (SELECT COUPON_ID FROM COUPON WHERE TYPE = CAMPING)
答案 1 :(得分:2)
我认为您只想要一个join
:
SELECT cc.COUPON_ID
FROM COMPANY_COUPON cc JOIN
COUPON c
ON cc.COUPON_ID = c.ID
WHERE cc.COMPANY_ID = ? AND c.TYPE = ?;
答案 2 :(得分:2)
您可能要在这里使用WHERE IN
:
SELECT *
FROM COMPANY_COUPON
WHERE COMPANY_ID = 1 AND COUPON_ID IN (SELECT ID FROM COUPON WHERE TYPE = 'CAMPING');
您还可以使用EXISTS
,这可能是编写逻辑的最佳方法:
SELECT cc.*
FROM COMPANY_COUPON cc
WHERE
cc.COMPANY_ID = 1 AND
EXISTS (SELECT 1 FROM COUPON c WHERE c.TYPE = 'CAMPING' AND c.ID = cc.COUPON_ID);
使用EXISTS
可能会优于在两个表之间进行联接,因为一旦找到第一个匹配项,数据库便会停止。