gpt4 book ai didi

php - 查询连接 id 匹配且行存在的表

转载 作者:太空宇宙 更新时间:2023-11-03 12:14:06 24 4
gpt4 key购买 nike

我需要一个 MySQL 查询,仅当这些表具有匹配的 ID 并且它确实存在于表中时才连接多个表。

我有 1 个父表和几个子表。父表包含每一行,而子表只包含它们需要的行。如果父表的 ID 存在于其中一个子表中,我需要将父表与子表连接起来。

这是我目前使用的,但不起作用。该查询最终没有结果,因为子表行可能不存在。例如,“widgets”表和“widget_login”表中可能存在 1 行,因为该小部件是“登录”小部件,但所有其他表都是空的。但它仍应检查所有表。我不确定如何克服这个问题。

SELECT FROM widgets
JOIN widget_login ON widget_login.id=widgets.id
JOIN widget_admin ON widget_admin.id=widgets.id
JOIN widget_facebook ON widget_facebook.id=widgets.id
WHERE widgets.type='specific_type'
etc...

最佳答案

删除引号。并添加要选择的列,例如*.

SELECT * FROM widgets
INNER JOIN widget_login ON widget_login.id=widgets.id
INNER JOIN widget_admin ON widget_admin.id=widgets.id
INNER JOIN widget_facebook ON widget_facebook.id=widgets.id
WHERE ... etc etc

编辑:如果您只想从小部件中进行选择,则使用 E​​XISTS:

SELECT * FROM widgets
WHERE EXISTS (select * from widget_login where widget_login.id=widgets.id)
AND EXISTS (select * from widget_admin ON widget_admin.id=widgets.id)
AND EXISTS (select * from widget_facebook ON widget_facebook.id=widgets.id)
WHERE ... etc etc

或输入:

SELECT * FROM widgets
WHERE id IN (select id from widget_login)
AND id IN (select id from widget_admin)
AND id IN (select id from widget_facebook)
WHERE ... etc etc

顺便说一句:各个表的 ID 应该相等似乎很奇怪。表 widgets 中名为 ID 的列应该标识一条 widget 记录,而表 widget_login 中名为 ID 的列应该标识一条登录记录。检查这个;也许您混淆了 ID。

编辑:还有一点要注意:如果您要查找存在于三个表中至少一个表中的小部件,请使用 EXISTS 或 IN 和 OR 而不是 AND。

编辑:要连接所有表并确保小部件至少存在于其中一个表中,请使用外部连接并检查结果是否为空值:

SELECT * FROM widgets
LEFT JOIN widget_login ON widget_login.id=widgets.id
LEFT JOIN widget_admin ON widget_admin.id=widgets.id
LEFT JOIN widget_facebook ON widget_facebook.id=widgets.id
WHERE (widget_login.id IS NOT NULL OR widget_admin.id IS NOT NULL OR widget_facebook.id IS NOT NULL)
AND ... etc etc

请注意其他表的列对于一条记录可以为空的进一步标准。例如。添加 AND widget_admin.name <> 'BAD' 将删除所有外部连接的记录,因为 NULL 不是 <> 'BAD'。

关于php - 查询连接 id 匹配且行存在的表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22955326/

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