如何 SELECT 有几个条件? (哪里...和...在(...))

How to SELECT with several conditions? (WHERE ... AND ... IN (...))

例如:在我的数据库中,我有 3 个 table:COMPANY、COUPON 和 COMPANY_COUPON。 COMPANY table 有字段:ID 和 NAME,COUPON table 有:ID,TITLE 和 TYPE,COMPANY_COUPON table 有:公司的 ID 和他们购买的优惠券的 ID拥有。

因此,在 java 中获取公司的所有优惠券我使用命令:

SELECT coupon_id FROM company_coupon WHERE company_id = ?

并放入Collection.

但是我需要一些东西来按类型获取公司的所有优惠券, 类似于:

SELECT * FROM company_coupon WHERE company_id = 1 AND coupon_id = (SELECT * FROM coupon WHERE type = camping)

当然这个不行,但我正在寻找类似的东西。

我知道我可以获取公司的所有优惠券并将它们放入 Collection 然后删除所有不等于指定类型的优惠券,但是有没有办法在数据库中执行此过程通过 SQL 个命令?

仅使用 one columnIN 运算符

SELECT * 
  FROM COMPANY_COUPON 
 WHERE COMPANY_ID = 1 
   AND COUPON_ID IN (SELECT COUPON_ID FROM COUPON WHERE TYPE = CAMPING)

我想你只是想要一个 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 = ?;

您可能想在此处使用 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 可能优于在两个表之间进行连接,因为数据库会在找到第一个匹配项后立即停止。