我有一个MySQL数据库,其中有1到N的关系。
Sample Data:
Table User:
ID,Name
Table Entry:
ID,Name
Table User_Entry:
UserID,EntryID
我想获取所有条目(他们的ID和NAME)以及一个标志,如果ID为x的用户有此条目(通过表USER_ENTRY)
答案 0 :(得分:1)
@GarethD答案很好,但我会更进一步验证UserID
中的实际User_Entry
是User
表中的实际有效用户。如果表中没有外键,则UserID
表中可能存在User
。要执行该检查,您可以加入这两个表,并通过以下方式验证Id
表中的User
。
SELECT e.EntryID
,e.NAME
,CASE WHEN u.ID IS NULL THEN 0 ELSE 1 AS UserFlag
FROM Entry AS e
LEFT OUTER JOIN User_Entry AS ue
ON e.id = ue.EntryID
LEFT OUTER JOIN User AS u
ON ue.UserID = u.ID
为了更进一步,您可以通过检查UserID
表中的User_Entry
和检查ID
表中的User
来编写案例陈述以查找错误记录。
SELECT e.EntryID
,e.NAME
,CASE WHEN u.ID IS NULL THEN 0 ELSE 1 AS UserFlag
,CASE WHEN ue.UserId IS NOT NULL AND u.ID IS NULL THEN 1 ELSE 0 END AS InvalidUserID
FROM Entry AS e
LEFT OUTER JOIN User_Entry AS ue
ON e.id = ue.EntryID
LEFT OUTER JOIN User AS u
ON ue.UserID = u.ID
答案 1 :(得分:0)
您需要从条目表中选择以获取所有条目,然后将其加入到user_entry表中以查明特定用户是否具有该条目:
SELECT e.ID,
e.Name,
CASE WHEN ue.EntryID IS NULL THEN 0 ELSE 1 END AS UserFlag
FROM Entry AS e
LEFT JOIN user_Entry AS ue
ON ue.EntryID = e.ID
AND ue.UserID = x
答案 2 :(得分:-3)
您实际上并不需要使用表C将ID连接在一起。这正是SQL JOIN的用途!试试:
SELECT * FROM table_a JOIN table_b WHERE table_a.id = table_b.id