我想根据两个关系表从一个表中选择用户
结构:

[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运算符也会返回重复的结果。

09-05 06:12