gpt4 book ai didi

sql - 一个关于表连接的sql问题

转载 作者:行者123 更新时间:2023-11-29 09:20:28 25 4
gpt4 key购买 nike

我想知道为什么这些陈述不一样(第一个对我有用)

AND user_thread_map.user_id = $user_id
AND user_thread_map.thread_id = threads.id

AND user_thread_map.user_id = users.id
AND user_thread_map.thread_id = threads.id
AND users.id = $user_id

它们不应该是一样的吗?在第二个中,我链接了前两行中的所有表,然后告诉它选择 users.id = $user_id。

有人可以解释为什么第二条语句不起作用吗?因为我想它会的。

最佳答案

假设您没有返回任何行(您并没有真正说出问题是什么,所以我在这里猜测一下),我的第一个想法是没有行users,其中 id 等于 $user_id

这是这两个 SQL 段之间的基本区别,第二个是 user_thread_mapthreadsusers 表的交叉联接。第一个根本不加入 users ,所以这就是我要寻找问题的地方。

您的user_thread_map 表似乎是用户线程 之间的多对多关系。如果这是真的,您确定该表中的 ID 字段与相应的其他表之间存在外键约束,例如:

users:
id integer primary key
name varchar(50)
threads:
id integer primary key
thread_text varchar(100)
user_thread_map:
user_id integer references users(id)
thread_id integer references threads(id)

如果您有这些外键约束,则不可能得到没有相应 users(id)user_thread_map(user_id) 值值。

如果这些约束不存在,查询可以告诉您在立即添加约束之前需要修复哪些值(这对于防止问题再次发生很重要),例如:

select user_thread_map.user_id
from user_thread_map
left join users
on user_thread_map.user_id = users.id
where users.id is null

关于sql - 一个关于表连接的sql问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1994729/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com