我有两个表。
我这样查询:
SELECT * FROM (
Select requester_name,receiver_name from poem_authors_follow_requests as one
UNION
Select requester_name,receiver_name from poem_authors_friend_requests as two
) as u
where (LOWER(requester_name)=LOWER('user1') or LOWER(receiver_name)=LOWER('user1'))
我正在使用 UNION,因为如果用户存在于第一个表和第二个表中,我想为每个用户获取不同的值。
例如:
table1
nameofuser
peter
table2
nameofuser
peter
如果 peter 在任何一张 table 上,我应该得到一次名字,因为它存在于两张 table 上。
我仍然从第一个表中得到一行,从第二个表中得到第二行。怎么了?
感谢任何帮助。
最佳答案
你的 SQL 有两个问题:
(这不是问题,但应该考虑)通过在
UNION
而不是表格上使用WHERE
,你创造了一个性能噩梦:MySQL 将创建一个包含UNION
的临时表,然后通过WHERE
查询它。在字段 (LOWER(requester_name)
) 上使用计算会使情况变得更糟。你得到两行的原因是,
UNION DISTINCT
只会抑制真正的重复项,所以元组(someuser,peter)
和元组(someotheruser, peter)
将导致重复。
编辑
要使 (someuser, peter)
成为 (peter, someuser)
的副本,您可以使用:
SELECT
IF(requester_name='peter', receiver_name, requester_name) AS otheruser
FROM
...
UNION
SELECT
IF(requester_name='peter', receiver_name, requester_name) AS otheruser
FROM
...
所以你只选择你已经知道的 someuser
: peter
关于mysql查询两张表,UNION和where子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9693136/