【问题标题】:Can't work out why Sub-Query returns more than 1 row无法弄清楚为什么子查询返回超过 1 行
【发布时间】:2014-01-27 04:41:18
【问题描述】:

我有以下数据,这些数据也在SQL FIDDLE 中。

    CREATE TABLE completework
    (`id` int, `workerid` int, `checkerid` int);

    CREATE TABLE worker
    (`id` int, `name` varchar(20));

    INSERT INTO completework
        (`id`, `workerid`, `checkerid`)
    VALUES
        (1, 2, 4),
        (2, 3, 5),
        (3, 4, 1),
        (4, 5, 2),
        (5, 1, 3),
        (6, 2, 4),
        (7, 3, 5),
        (8, 4, 1),
        (9, 5, 2),
        (10, 1, 3),
        (11, 2, 4),
        (12, 3, 5),
        (13, 4, 1),
        (14, 5, 2);

    INSERT INTO worker
        (`id`, `name`)
    VALUES
    (1, 'Anthony'),
    (2, 'Bill'),
    (3, 'Claire'),
    (4, 'Daniel'),
    (5, 'Emma');

我想返回工人是工人或检查员的结果,所以我认为我需要合并这两列,但是当我尝试这样做时,我得到了错误

Subquery returns more than 1 row

我已经尝试了以下

    select
    workerid as wid,
    wn.name
    from  completework
    inner join worker wn on completework.workerid=wn.id 
    group by wid

上面只是获取workerid列

    select
    checkerid as cid,
    wn.name
    from  completework
    inner join worker wn on completework.checkerid=wn.id 
    group by cid

上面只是获取checkerid列

    SELECT DISTINCT workedonid FROM (
      SELECT checkerid workedonid FROM completework  
      UNION 
      SELECT workerid workedonid FROM completework
    )c
    ORDER BY workedonid ASC

上面从任一列获取一个 id

    select
        (
            SELECT DISTINCT workedonid FROM (
              SELECT checkerid workedonid FROM completework  
              UNION 
              SELECT workerid workedonid FROM completework
            )c
        ) a,
    wn.name
    from  completework
    inner join worker wn on completework.checkerid=wn.id 
    group by a

在上面我试图将上面的内容放入子查询中,但出现错误,我该如何解决这个问题?

【问题讨论】:

    标签: mysql sql select join in-clause


    【解决方案1】:

    试试这个:

    SELECT DISTINCT w.id AS wid, w.name
    FROM worker w
    INNER JOIN completework cw ON w.id IN (cw.workerid, cw.checkerid);
    

    查看SQL FIDDLE DEMO

    输出

    | WID |    NAME |
    |-----|---------|
    |   2 |    Bill |
    |   4 |  Daniel |
    |   3 |  Claire |
    |   5 |    Emma |
    |   1 | Anthony |
    

    【讨论】:

      猜你喜欢
      • 2015-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多