简单的MySQL连接问题
我被这个简单的查询难住了,因为它是我以前从未尝试过的 我有一个用户表,用户表和小部件表 一个简单的内部连接通过连接user\u widget.user\u id=user.user\u id向我展示了它们有哪些小部件简单的MySQL连接问题,mysql,join,Mysql,Join,我被这个简单的查询难住了,因为它是我以前从未尝试过的 我有一个用户表,用户表和小部件表 一个简单的内部连接通过连接user\u widget.user\u id=user.user\u id向我展示了它们有哪些小部件 如何在小部件表中显示它们没有的小部件?使用文档中的子选择查找不存在的小部件。这是一个猜测,(我没有尝试过),但尝试一下: Select Distinct u.*, Z.* From User u Left Join (Select u.UserId, w.*
如何在小部件表中显示它们没有的小部件?使用文档中的子选择查找不存在的小部件。这是一个猜测,(我没有尝试过),但尝试一下:
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
使用交叉连接和左外连接(这是我的MS SQL经验,但这个概念应该适用) 它是这样工作的。子查询获取用户和小部件的所有可能组合 左边的外部连接使您的用户与小部件关联发挥作用 WHERE子句的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
(其中1是您感兴趣的用户的id)感谢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
干杯伙计们我想补充一点,就个人而言,交叉连接可能是我最喜欢的连接。很少使用,但适用于某些情况。
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;
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;