如何 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 column
和 IN
运算符
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
可能优于在两个表之间进行连接,因为数据库会在找到第一个匹配项后立即停止。
例如:在我的数据库中,我有 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 column
和 IN
运算符
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
可能优于在两个表之间进行连接,因为数据库会在找到第一个匹配项后立即停止。