Сравнительный выбор на той же таблице (MySQL)
Я действительно новичок в MySQL и пытаюсь сделать простой выбор, но я не могу понять это.
Вот что у меня есть:
I got this in a Table named Control:
| CODE | OFFICE |
| 1 | usa |
| 2 | usa |
| 3 | usa |
| 4 | usa |
| 5 | usa |
| 1 | china |
| 3 | china |
| 4 | china |
And I need get this:
| CODE | OFFICE |
| 2 | usa |
| 5 | usa |
Затем ВЫБЕРИТЕ код, офис, ГДЕ коды еще не зарегистрированы с офисом = Китай.
Я должен сделать само присоединение или что-то в этом роде или использовать выражение GROUP BY? Я застрял здесь... Я действительно был бы признателен за любую помощь.
2 ответа
Решение
Я думаю, это работает
create table Test(id integer, code integer, office varchar(100));
insert into Test(id, code, office) values(1, 1, "usa"),(2, 2, "usa"),(3, 3, "usa"),(4, 4, "usa"),(5, 5, "usa"),(6, 1, "china"),(7, 3, "china"),(8, 4, "china");
select * from Test;
Select * from Test where code NOT IN (select code from Test where office = "china");
Вы должны использовать подзапрос.
Вы можете сделать "Self-Left-Join" на Code
и рассмотрим только те строки, в которых совпадение не найдено в правой части, т. е. в правой части IS NULL
SELECT
tleft.*
FROM Control AS tleft
LEFT JOIN Control AS tright
ON tright.Code = tleft.Code AND
tright.Office = 'china'
WHERE tleft.Office = 'usa' AND
tright.Code IS NULL -- this filters no matching code found in china