Вы можете присоединиться к запрашиваемому результату? - PullRequest
0 голосов
/ 02 июня 2018

У меня есть два запроса, которым нравится перекрестное соединение.Возможно ли что-то подобное?

SELECT concat_ws(' ',first_name, last_name) adopters, d.name
FROM adopters
WHERE NOT EXISTS (SELECT adopter_id FROM dog_adoptions where adopter_id = id)
CROSS JOIN (SELECT name 
  FROM dogs 
  WHERE NOT EXISTS (SELECT dog_id FROM dog_adoptions WHERE dog_id = id)) d

для контекста здесь есть ссылка sql fiddle: http://sqlfiddle.com/#!17/ac120/4349

, и проблема была: «Усыновители, которые еще не выбрали собаку для усыновления, игенерировать все возможные комбинации приемных и доступных собак. "

1 Ответ

0 голосов
/ 02 июня 2018

Да, вам просто нужен правильный синтаксис.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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...