简单的MySQL加入问题

时间:2010-01-19 15:54:58

标签: mysql join

我对这个简单的查询感到难过,因为它之前没有尝试过。

我有一个User表,User_Widget表和一个Widget表。

一个简单的内部联接通过加入user_widget.user_id = user.user_id向我显示他们拥有的小部件。

如何在Widget表中显示他们没有的小部件?

6 个答案:

答案 0 :(得分:1)

使用文档中的子选项查找不存在的内容..

答案 1 :(得分:1)

使用CROSS JOIN和LEFT OUTER JOIN(这来自我的MS SQL经验,但概念应该成立)。

它的工作原理如下。子查询获得用户和窗口小部件的所有可能组合。

LEFT OUTER JOIN使您的User_Widgets关联发挥作用。

WHERE CLAUSE的IS NULL部分将排除用户拥有的小部件,仅提供不具有的小部件。

SELECT allpossible.User_ID, allpossible.Widget_ID FROM
(
  SELECT User_ID, Widget_ID FROM
    Users
  CROSS JOIN
    Widgets
) allpossible
LEFT OUTER JOIN
  User_Widgets uw
ON
  allpossible.User_ID = uw.User_ID
AND allpossible.Widget_ID = uw.Widget_ID
WHERE
  uw.UserID IS NULL

答案 2 :(得分:0)

这是猜测,(我还没试过),但试试这个:

Select Distinct u.*, Z.*
From User u
   Left Join 
        (Select u.UserId, w.* 
         From Widget w
         Where Not Exists 
              (Select * From User_Widget
               Where userId = u.UserId 
                  And widgetId = w.WidgetId)) Z
    On Z.userId = u.UserId

答案 3 :(得分:0)

SELECT * FROM widgets WHERE id NOT IN
(
    SELECT widget_id FROM user_widgets WHERE user_id = 1
)

(其中1是您感兴趣的用户的ID)

答案 4 :(得分:0)

感谢Bart Janson,我得到的问题是:

SELECT * FROM widgets
WHERE NOT EXISTS (
SELECT * FROM widget_user
WHERE widgets.widget_id = widget_user.widget_id
AND user_id = "ID NUMBER OF PERSON YOU WANT"
)
ORDER BY RAND()
LIMIT 10

干杯球员

答案 5 :(得分:0)

SELECT *
FROM widgets w
LEFT OUTER JOIN user_widget uw 
ON w.id = uw.widget_id AND uw.user_id = 1 // or whatever user u want
WHERE uw.widget_id IS NULL;