SQL:从同一个表连接时输出多行
我的问题是:从同一个表连接时是否可以输出多行? 以这段代码为例,我希望它输出2行,每个表一行。相反,它所做的是给我一行所有的数据SQL:从同一个表连接时输出多行,sql,join,union,Sql,Join,Union,我的问题是:从同一个表连接时是否可以输出多行? 以这段代码为例,我希望它输出2行,每个表一行。相反,它所做的是给我一行所有的数据 SELECT t1.*, t2.* FROM table t1 JOIN table t2 ON t2.id = t1.oldId WHERE t1.id = '1' 更新 我对UNION/UNION ALL的问题是:我不知道t1.oldId值等于什么。我只知道t1的id。我试图避免使用2个查询,因此有没有一种方法可以这样做: SELECT t1.* F
SELECT t1.*, t2.*
FROM table t1
JOIN table t2
ON t2.id = t1.oldId
WHERE t1.id = '1'
更新我对UNION/UNION ALL的问题是:我不知道t1.oldId值等于什么。我只知道t1的id。我试图避免使用2个查询,因此有没有一种方法可以这样做:
SELECT t1.*
FROM table t1
WHERE t1.id = '1'
UNION
SELECT t2.*
FROM table t2
WHERE t2.id = t1.oldId
样本数据messages_users
id message_id user_id box thread_id latest_id
--------------------------------------------------------
8 1 1 1 NULL NULL
9 2 1 2 NULL 16
10 2 65 1 NULL 15
11 3 65 2 2 NULL
12 3 1 1 2 NULL
13 4 1 2 2 NULL
14 4 65 1 2 NULL
15 5 65 2 2 NULL
16 6 1 1 2 NULL
Query:
SELECT mu.id FROM messages_users mu
JOIN messages_users mu2 ON mu2.latest_id IS NOT NULL
WHERE mu.user_id = '1' AND mu2.user_id = '1' AND ((mu.box = '1'
AND mu.thread_id IS NULL AND mu.latest_id IS NULL) OR mu.id = mu2.latest_id)
这个查询解决了我的问题。但是我的问题的答案似乎不是使用
连接
,而是使用联合
你的意思是t1的一行和t2的一行
你在找工会,不是加入
select * from table where id = 1
union
select * from table where oldid = 1
如果试图在表中乘法行,则需要UNION ALL(非UNION): 我有时也会使用交叉连接来执行此操作:
select *
from t cross join
(select 1 as seqnum union all select 2) vals
交叉联接显式地将行数乘以,在本例中,附加了sequencenumber。好吧,因为它是同一个表,您可以执行以下操作:
SELECT t2.*
FROM table t1
JOIN table t2
ON t2.id = t1.oldId
OR t2.id = t1.id
WHERE t1.id = '1'
这个问题的答案显然是一个联盟,而不是一个联盟。UNION删除了重复项,因此只返回一行。这假设t1和t2中的每一列都完全匹配-我假设不是这样…阅读问题。它是同一个表,有两个不同的别名。连接在ID=oldID上。这表明t1记录的“oldID”值与t2记录的“oldID”值不同。引擎仍可能尝试查找并消除重复项,如
UNION
所示,这可能会影响性能。如果您确信不存在重复项,那么最好使用UNION-ALL
。您可以发布一些示例数据吗?如果我们能看到数据可能会更容易。
SELECT t2.*
FROM table t1
JOIN table t2
ON t2.id = t1.oldId
OR t2.id = t1.id
WHERE t1.id = '1'