Да, вам просто нужен правильный синтаксис.CROSS JOIN
- как и все операторы JOIN
- это двоичный оператор , распознаваемый в предложении FROM
.Поэтому вам нужно поместить его туда:
SELECT concat_ws(' ', a.first_name, a.last_name) as adopter, d.name
FROM adopters a CROSS JOIN
(SELECT d.name
FROM dogs d
WHERE NOT EXISTS (SELECT 1 FROM dog_adoptions da WHERE da.dog_id = d.id)
) d
WHERE NOT EXISTS (SELECT 1 FROM dog_adoptions da where da.adopter_id = a.id);
Вы также можете избавиться от подзапроса в предложении FROM
:
SELECT concat_ws(' ', a.first_name, a.last_name) as adopter, d.name
FROM adopters a CROSS JOIN
dogs d
WHERE NOT EXISTS (SELECT 1 FROM dog_adoptions da where da.adopter_id = a.id) AND
NOT EXISTS (SELECT 1 FROM dog_adoptions da WHERE da.dog_id = d.id)