我想根据两个关系表从一个表中选择用户
结构:
[user]
uid | firstname | lastname | ...
---------------------------------
482 | USERa | USERa | ...
885 | USERb | USERb | ...
405 | USERc | USERc | ...
385 | USERd | USERd | ...
[news_info]
uid_local | uid_foreign
--------------------------------
125 | 482
100 | 405
[news_add]
uid_local | uid_foreign
--------------------------------
125 | 885
105 | 385
现在我只想通过uid_local->125从[news_info]和[news_add]中选择USERa和USERb
SELECT
nnfo.uid_local,
user.*
FROM user
JOIN news_info nnfo
ON nnfo.uid_foreign = user.uid
WHERE nnfo.uid_local = 125
result=USERa//工作
SELECT
nadd.uid_local,
user.*
FROM user
JOIN news_add nadd
ON nadd.uid_foreign = user.uid
WHERE nadd.uid_local = 125
result=USERb//works结果
现在将sql语句“合并”为一个…以获取USERa和USERb
SELECT
nnfo.uid_local,
nadd.uid_local,
user.*
FROM user
JOIN news_info nnfo
ON nnfo.uid_foreign = user.uid
JOIN news_add nadd
ON nadd.uid_foreign = user.uid
WHERE nnfo.uid_local = 125 AND nadd.uid_local = 125
结果=空//no errors。。。。。
怎么了…我尝试了一些其他的说法,但没有结果:(
最佳答案
合并查询结果时,有两种不同的方法:
工会
连接
要知道要选择哪一个查询,必须知道要合并的两个查询中的表之间是否存在技术链接。在你的例子中,有一个功能链接(nnfo.uid_local = 125 AND nadd.uid_local = 125
),但它不足以加入这两个宇宙。您仍然可以只使用一个SELECT
就得到结果,但我认为最终的结果将不清楚,而且不符合SQL提供的精神。
我会寻求工会的解决方案:
SELECT
nnfo.uid_local,
user.*
FROM user
JOIN news_info nnfo
ON nnfo.uid_foreign = user.uid
WHERE nnfo.uid_local = 125
UNION
SELECT
nadd.uid_local,
user.*
FROM user
JOIN news_add nadd
ON nadd.uid_foreign = user.uid
WHERE nadd.uid_local = 125
编辑:我看到davek的结果实现了
UNION ALL
而不是UNION
。我假设您只希望返回一次USERa,如果它碰巧出现在两个独立查询中,这就是为什么我使用simpleUNION
运算符,而UNION ALL
运算符也会返回重复的结果。