【问题标题】:How to SELECT with several conditions? (WHERE ... AND ... IN (...))如何选择多个条件? (在哪里......和......在(......))
【发布时间】:2019-01-06 15:03:06
【问题描述】:

例如:在我的数据库中,我有 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 = ?

并将其放入 Collection。

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

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

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

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

【问题讨论】:

    标签: sql select derby


    【解决方案1】:

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

    【讨论】:

    • 非常感谢,这就是我正在看的!
    • @VladimirKraykin 给出的所有答案都应该有效,并且都值得支持。你不能这样做,但为了将来参考,最好通过投票来奖励有用的答案(我认为你可以在获得 500 或 1000 个代表点后这样做)。
    • 是的,我想全部投票,但现在我不能。
    【解决方案2】:

    仅将 one columnIN 运算符一起使用

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

    【讨论】:

    • 非常感谢,这就是我正在看的!
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2016-02-07
      • 1970-01-01
      • 2022-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-06
      • 2016-12-11
      • 1970-01-01
      相关资源
      最近更新 更多