SQL查询帮助1到N.

时间:2014-03-10 12:21:54

标签: mysql sql

我有一个MySQL数据库,其中有1到N的关系。

    Sample Data:
    Table User:
    ID,Name
    Table Entry:
    ID,Name 
    Table User_Entry:
    UserID,EntryID

我想获取所有条目(他们的ID和NAME)以及一个标志,如果ID为x的用户有此条目(通过表USER_ENTRY)

3 个答案:

答案 0 :(得分:1)

@GarethD答案很好,但我会更进一步验证UserID中的实际User_EntryUser表中的实际有效用户。如果表中没有外键,则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