【问题标题】:union on the same table同一张桌子上的工会
【发布时间】:2010-06-03 10:45:49
【问题描述】:

我有一张桌子:

ID | Id1 | Id2
1  | 100 | 12
2  | 196 | 140
3  | 196 | 141
4  | 150 | 140
5  | 150 | 199

我想编写一个查询,它会给我一个表,其中包含具有相同 ID2 且 id1 等于 196 或 150 的记录。 我想到了联合:

从 ID1 = 196 的表中选择 * 联盟 从 ID1 = 150 的表中选择 *

但这不包括 ID2 要求。 我该怎么做?

【问题讨论】:

  • 您的示例查询使用“itemid”,它不在您的示例表中,这令人困惑。

标签: sql union


【解决方案1】:

如果我正确理解了您的问题,那么这应该是答案:

select * from mytable where id2 in
(select id2 from mytable
group by id2
having count(*)>=2)
and (id1=196 or id1=150)

【讨论】:

  • 差不多好了;) 下面的有效解决方案: select * from mytable where id2 in (select id2 from mytable where (id1=196 or id1=150) group by id2 with count(*)>=2 ) 和 (id1=196 或 id1=150) 谢谢!
【解决方案2】:

你为什么要做union

您可以使用in 完成相同的任务。

SELECT * FROM Table WHERE Id1 IN (196, 150) OR Id2 IN (196, 150)

【讨论】:

  • 但我不知道 id2 的值。
  • 我无法明确询问 id2 值。
【解决方案3】:
SELECT ID
FROm yourTable as table1
INNER JOIN yourTable as table2
ON table1.Id2 = table2.Id2
WHERE table1.id1 IN (196.150)

我们来了

【讨论】:

  • 您能告诉我您希望得到哪个 ID 作为结果吗?也许它会帮助我理解你想要什么。
【解决方案4】:

您可以将表连接到自身

 select T1.* from Mytable T1 inner join MyTable T2 
 ON T1.ID2 = T2.ID2
 AND T1.ID1 in (196, 150)

类似的事情,根据您的确切要求和表结构,您可能需要做更多的工作以避免重复条目。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-23
    • 2014-10-14
    • 1970-01-01
    • 2018-06-06
    • 1970-01-01
    相关资源
    最近更新 更多