Выберите из двух mysql таблиц, используя выбор 1 - PullRequest
0 голосов
/ 11 апреля 2020

Со структурой и данными ниже я хочу вернуть цвет из таблицы A, если этот элемент отсутствует в таблице B. Я не получаю хорошего результата, даже если таблица B не содержит этот элемент. Кажется, что проблема заключается во втором операторе выбора, поскольку он всегда возвращает 1, когда выполняется сам по себе. Я думал, что «выбрать 1» возвращает количество того, что он находит. если это так, как он всегда может вернуть 1? Разве это не хороший способ сделать это?

    CREATE TABLE A (
      id INT NOT NULL AUTO_INCREMENT,
      pid INT NOT NULL,
      color_name VARCHAR (24) NOT NULL,
    )

    CREATE TABLE B (
      id INT NOT NULL,
      pid INT NOT NULL,
    ) 

    A {1,2,red}
    B {2,2}

    select color_name from A where (select 1 from B where B.id = '1' and B.pid = '2')

Ответы [ 2 ]

2 голосов
/ 11 апреля 2020

Вам не хватает NOT EXISTS:

select color_name from A where NOT EXISTS (select 1 from B where B.id = '1' and B.pid = '2')

, но, может быть, вы хотите это:

select color_name from A where NOT EXISTS (select 1 from B where B.id = '1' and B.pid = A.pid)

или это:

select color_name from A where NOT EXISTS (select 1 from B where B.pid = A.pid)

если все, что вы хотите это найти pid s из A, которые не существуют в B.

0 голосов
/ 11 апреля 2020

Не могу выздороветь,

SELECT color_name FROM A WHERE A.id NOT IN ( SELECT  id FROM B )
...