は単純試してみてください。
SELECT *, 'FALSE' As is_book
FROM cars c
WHERE NOT EXISTS (
SELECT * FROM book_cars b
WHERE b.car_id=c.id AND book = 't'
)
をあなたもサブクエリを使用することができます
SELECT *
FROM (
SELECT cars.*,
CASE WHEN EXISTS (
SELECT book_cars.* FROM book_cars
WHERE book_cars.car_id=cars.id AND book='t')
THEN 'TRUE' ELSE 'FALSE' END AS is_book
FROM cars
) x
WHERE is_book='FALSE';
EDIT
を、それを(または「列」)任意の式を見ていない標準SQL
WHERE
句で
SELECT cars.*,
CASE WHEN EXISTS (
SELECT book_cars.* FROM book_cars
WHERE book_cars.car_id=cars.id AND book='t')
THEN 'TRUE' ELSE 'FALSE' END AS 'is_book'
FROM cars
WHERE is_book='FALSE';
SELECT
句で宣言:
クエリでの問題は、以下の最後の行にWHERE
句ですは、FROM
句の表の列のみを表示できます。
is_book
句がSELECT
句で宣言されているため、WHERE
には表示されません。
あなたのようなサブクエリ、使用している場合:
SELECT *
FROM (--- subquery
SELECT some_expression AS new_column
FROM ....
) x
WHERE new_column = 111
を、その後、外側のクエリは、その新しい列を見ています。 、WHERE
とは対照的に、SELECT
レベルで宣言されたカラムを参照し
SELECT cars.*,
CASE WHEN EXISTS (
SELECT book_cars.* FROM book_cars
WHERE book_cars.car_id=cars.id AND book='t')
THEN 'TRUE' ELSE 'FALSE' END AS 'is_book'
FROM cars
HAVING is_book='FALSE';
HAVING
ので:
またHAVING
句を使用することができます。
''is_book''を' is_book'に変更してみてください。 –
エラーが発生しました:PG :: UndefinedColumn:ERROR: "is_book"列が存在しません – Acrux
'is_book'列が存在することは確かですか? –