如何在几种条件下进行选择? (在... AND ... IN(...))

时间:2019-01-06 15:03:06

标签: sql apache select derby

例如:在我的数据库中,我有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命令在数据库中执行此过程? >

3 个答案:

答案 0 :(得分:2)

仅将one columnIN运算符一起使用

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可能会优于在两个表之间进行联接,因为一旦找到第一个匹配项,数据库便会停止。