Вы можете добавить предложение HAVING в конец вашего запроса, например.
HAVING checked > 0
Обратите внимание, что поскольку нет GROUP BY
положения о запросе, запрос будет возвращать не более одной строки. Это допустимый оператор SQL, но он возвращает нечетный результат, поскольку это очень необычный прецедент, который удовлетворяет этот результат.
(Извлечение агрегата COUNT() будет также предотвратить ряд от возвращения, но тогда оператор будет также то потенциально вернуть более одной строки. Это не совсем ясно, что ResultSet вы хотите вернулся.)
Followup
Q: результат я хочу перечислить все жанры, доступные с колонкой, которая указывает, имеет ли определенный ряд жанр.
A: Но это совсем другой результат, чем тот, который возвращается OP-запросом.
Обычный шаблон для результата, как это, чтобы возвратить «все» строку из жанра (при условии, что есть столбец или комбинация столбцов в genre
, который является уникальным) с помощью операции соединения будет:
SELECT g.id
, g.foo
, sg.genreid IS NULL AS checked
FROM genre g
LEFT
JOIN seriesgenre sg
ON sg.genreid = g.id
AND sg.seriesid = 1
GROUP
BY g.id
, g.foo
Если id
является уникальным в таблице genre
, тогда g.foo
может быть опущен из предложения GROUP BY
. Это нормальный образец.
Если вы хотите опустить строки из genre
, которые не имеют соответствующей строки в рядуgenre, то просто удалите ключевое слово LEFT
, чтобы сделать операцию соединения «внутренним» соединением, а не «внешним» соединением.
Если кортеж (genreid,seriesid)
является уникальным, мы можем исключить предложение GROUP BY
, так как нам гарантировано, что операция JOIN вернет не более одной соответствующей строки из таблицы seriesgenre, например.
SELECT g.id
, g.foo
, sg.genreid IS NULL AS checked
FROM genre g
LEFT
JOIN seriesgenre sg
ON sg.genreid = g.id
AND sg.seriesid = 1
В более общем случае, если id
не является уникальным в genre
, или там не набор столбцов, что делает строку в genre
уникальным, то мы должны были бы избежать разрушения строк с GROUP BY
пункт, и использовать коррелировала подзапрос вместо операции JOIN:
SELECT g.id
, g.foo
, IFNULL(SELECT 1
FROM seriesgenre sg
WHERE sg.genreid = g.id
AND sg.seriesid = 1
LIMIT 1
),0) AS checked
FROM genre g
Если мы хотим, чтобы исключить строки, которые не имеют соответствующих строк в seriesgenre
, снова используя связанный подзапрос:
SELECT g.id
, g.foo
, (SELECT 1
FROM seriesgenre sg
WHERE sg.genreid = g.id
AND sg.seriesid = 1
LIMIT 1
) AS checked
FROM genre g
HAVING checked = 1
Вы хотите, чтобы запрос ** НЕ ** дал вам какой-либо результат, если условие ** НЕ ** встречено? – Youness
да в короткие сроки – user2742831