回答

收藏

mysql查询两个表,UNION和where子句

技术问答 技术问答 490 人阅读 | 0 人回复 | 2023-09-14

我有两张桌子。8 U& d. [% V* u# j
我这样查询:
) ]/ ?& ~% X$ ^1 _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因为如果用户存在于第一表和第二表中,我想为每个用户获得不同的值。
8 b6 Z7 J& @8 k% r8 ?& l例如:3 U& V. L% f7 b
table1nameofuserpetertable2nameofuserpeter如果peter我应该一次在任何一张桌子上得名,因为它存在于两张桌子上。+ Z3 \* X/ @  g6 D* I  d
我还是从第一张桌子得到一排,从第二张桌子得到第二排。
- B' N7 W. w$ q+ b0 v0 G% e; k赞赏任何帮助。
7 u$ G$ j: Y7 @0 }" ?                                                               
, b" q% i4 n! @' e: s    解决方案:                                                               
) `+ O& v, w* K: @                                                                您的SQL有两个问题:1 J7 o, K' |9 C, L; n7 g
[ol](这是 不是    问题,但应考虑)WHERE过UNION,你创造性能噩梦而不是表:MySQL将创建一个临时表UNION,然后查询它在WHERE。在字段(LOWER(requester_name))使用计算会使情况更糟。
6 F0 K3 _- j4 C" p得到两行的原因是这个UNION DISTINCT只会抑制实际重复,所以元组(someuser,peter)和元组(someotheruser,peter)会导致重复。
) x1 ?4 [0 k' g. o[/ol]编辑5 L' o' W3 }9 F) V$ D0 o- t
要(someuser,peter)复制(peter,someuser)可使用您的内容:' \8 d& F- h0 [, F
SELECT  IF(requester_name='peter',receiver_name,requester_name) AS otheruserFROM  ...UNIONSELECT  IF(requester_name='peter',receiver_name,requester_name) AS otheruserFROM  ...所以,你只选择someuser你已经知道:peter
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则