2014-01-27 2 views
2

У меня есть следующие данные, которые также находятся в SQL FIDDLE.Не могу решить, почему Sub-Query возвращает более 1 строки

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 

выше получает идентификатор из любой колонки

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 

Выше я пытался работать выше в подзапрос, но я получаю сообщение об ошибка, как я могу обойти это?

ответ

2

Попробуйте это:

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 | 
Смежные вопросы