mysql - 无法弄清楚为什么子查询返回超过 1 行

标签 mysql sql select join in-clause

我有以下数据,这些数据也在 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');

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

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

在上面,我试图将上面的内容转换为子查询,但收到错误,我该如何解决这个问题?

最佳答案

试试这个:

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 |

关于mysql - 无法弄清楚为什么子查询返回超过 1 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21373148/

相关文章:

mysql - 通过外键查找 Max() 值

mysql - SQL 从两个表中选择

mysql - 从具有相同 WHERE 子句的两个不同表中选择?

php - Mysql/Phpmyadmin 中的德语元音变音

php - 如何计算每页使用的 MySQL 查询总数?

python - Mysql查询查找每个月年的计数(id)

php - 我需要从数据库中检索数据并在 php if 语句中使用它

mysql选择两个表中不同的记录

sql - Azure 数据工厂中的复制数据事件后更新

Angular2 *ngFor 在选择列表中,根据对象中的字符串设置事件