Mysql WHERE field1 或 field2 在(子查询)

问题描述 投票:0回答:2

offers
表包含报价及其详细信息。

combinedofferstbl
有两列:offer_id和combinedwithoffer_id。

我想做类似的事情

SELECT * 
from combined offers 
where combinedofferstbl.offer_id
OR combinedofferstbl.combinedwithoffer_id IN (
    SELECT offer_id 
    from offers_tbl) 

这样我就可以找到在“左”或“右”组合的组合报价。

我不能那样使用 OR。

有什么方法可以在不重复

IN (...offerstbl...)
两次(合并表中两列各一次)的情况下实现此操作?

我想这样做是因为 IN 子查询的真实版本相当长。

mysql subquery
2个回答
0
投票

您可以使用

exists
运算符实现此功能:

SELECT *
FROM   combinedoffers_tbl c
WHERE  EXISTS (SELECT *
               FROM   offers_tbl o
               WHERE  o.offer_id IN (c.offer_id, c.combinedwithoffer_id))

0
投票

您可以使用

INNER JOIN
来做到这一点:

SELECT c.* 
FROM combinedofferstbl c
INNER JOIN offers_tbl o ON o.offer_id = c.offer_id
                           OR offers_tbl o on o.offer_id = c.combinedwithoffer_id
© www.soinside.com 2019 - 2024. All rights reserved.