gpt4 book ai didi

sql - mysql查询以选择除以外的所有内容

转载 作者:IT老高 更新时间:2023-10-29 00:20:22 27 4
gpt4 key购买 nike

我有两个 mysql 表。

第一个称为“选择”,由 id、user_id 和 widget_id 字段组成。

另一个叫做“widgets”,包括一些东西,包括widget_id。

我创建了一个过滤器,以便用户可以显示他/她选择的小部件或他/她没有选择的小部件。对于他选择的那些,我用这个:

SELECT * 
FROM widgets, chosen
WHERE chosen.user_id = $user_id
AND chosen.widget_id = widgets.widget_id

但是,我不知道如何显示他/她没有选择的那些。这不起作用(显示所有内容):

SELECT * 
FROM widgets, chosen
WHERE !( chosen.user_id = $user_id
AND chosen.widget_id = widgets.widget_id)

我该怎么做?

最佳答案

使用 NOT IN:

SELECT w.*
FROM WIDGET w
WHERE w.widget_id NOT IN (SELECT c.widget
FROM CHOSEN c
WHERE c.user_id = $user_id)

使用不存在:

SELECT w.*
FROM WIDGET w
WHERE NOT EXISTS (SELECT NULL
FROM CHOSEN c
WHERE c.widget_id = w.widget_id
AND c.user_id = $user_id)

左连接/为空:

   SELECT w.*
FROM WIDGET w
LEFT JOIN CHOSEN c ON c.widget_id = w.widget
AND c.user_id = $user_id
WHERE w.widget IS NULL

性能:

如果 columns compared (widget_id in either table) are not nullable, LEFT JOIN/IS NULL performs the best on MySQL .如果 columns are nullable (the value could be NULL), NOT IN or NOT EXISTS perform better .

关于sql - mysql查询以选择除以外的所有内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4405729/

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