У меня есть следующие записи в этих двух таблицах mysql.
Таблица-А
Question_No
1
2
3
4
5
Таблица-Б
Roll_No Question_No Ans_Option
1001 1 NULL
1001 2 D
1001 3 NULL
1002 1 C
1002 2 NULL
Здесь слово «NULL» явно вставлено в столбец, ничего не путать.
Как я могу отобразить следующий результат по запросу mysql?
Questions not attempted by roll no 1001 are : 1, 3, 4, 5
Questions not attempted by roll no 1002 are : 2, 3, 4, 5
Я пробовал со следующим кодом, но не работал
select distinct a.* from table_A a NATURAL LEFT JOIN table_B b where
b.Question_No IS NULL and b.Roll_No=1001;// where I am wrong here ? I have
not set any column as primary key , should I set?
Заранее большое спасибо






Когда вы ставите условие WHERE на LEFT OUTER JOIN, это буквально то же самое, что и INNER JOIN:
select distinct a.*
from table_A a
NATURAL LEFT JOIN table_B b
where b.Question_No IS NULL
and b.Roll_No=1001; -- this condition makes it `NATURAL JOIN`
Вы можете переписать его как:
SELECT DISTINCT a.*
FROM table_A a
LEFT JOIN table_b b
ON a.Question_No = b.Question_No
AND b.Roll_No=1001
WHERE b.Ans_Option_No IS NULL
@Том WHERE b.Ans_Option_No IS NULL1
Хорошо, как я могу добавить «b.Question_No is NULL» вместе с приведенным выше кодом, который вы написали ранее?
привет, я не получаю вопросы, которые Ans_No содержат значения NULL, я получаю вопросы 3, 4, 5, но не 1, 3, 4, 5
@Tom Ты запустил код? dbfiddle.uk/…
Я не установил какие-либо столбцы в качестве первичного ключа? Должен ли я установить Question_No в качестве первичного ключа в обеих таблицах?
Большое спасибо, Лукаш, я получил это, добавив следующее условие: где b.Ans_Option_No IS NULL OR b.Ans_Option_No='NULL';
Используйте cross join для создания строк, а затем отфильтруйте их:
select r.roll_no, b.Question_No
from (select distinct roll_no from b) r cross join
a left join
b
on b.roll_no = r.roll_no and b.Question_No = a.Question_No
where b.roll_no is null;
Получается вопрос, который нет в b.
Большое спасибо за помощь ... этот запрос приведет к более быстрому результату или решению, предоставленному Лукашем?
@ Том. . . Они реализуют разную логику. Я думаю, что это версия, которая вам действительно нужна.
спасибо за помощь, но я получаю значения для рулона № 1001: 3, 4, 5, как я могу получить 1, 3, 4, 5?