Ошибка SQL 1064: синтаксическая ошибка при использовании содержит - PullRequest
0 голосов
/ 22 октября 2018

Я пытаюсь использовать оператор в своем запросе, но я получаю эту ошибку:

Код ошибки: 1064. У вас ошибка в синтаксисе SQL;проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы узнать правильный синтаксис для использования рядом с 'содержит (выберите ssn из Музыканты M2, где' в строке 6

Мой запрос должен получить все instrID, воспроизводимые каждыммузыкант по имени Джон. Это означает, что все Джонс использовал этот инструмент. Он говорит, что это синтаксическая ошибка, и я не знаю, где ошибка. И это мой SQL-запрос:

select instrID
from Plays P
where (
  select ssn 
  from Musicians M
  where M.ssn = P.ssn
) contains (
  select ssn
  from Musicians M2
  where M.aname = 'John'
)

Ответы [ 4 ]

0 голосов
/ 22 октября 2018

Это довольно сложно.Я бы подошел к этому, используя group by и having:

select p.instrID
from Plays p join
     Musicians m
     on m.ssn = p.ssn
where m.aname = 'John'
group by p.instrID
having count(*) = (select count(*) from Musicians m2 where m2.aname = 'John');

Предложение having удовлетворяет требованию, чтобы все музыканты по имени "Джон" играли на инструменте.

0 голосов
/ 22 октября 2018

Вы можете присоединиться следующим образом:

select p.instrID
from Plays P, Musicians m
where p.ssn = m.ssn
and m.aname = 'John';

В зависимости от требований, вы можете попробовать left outer join, right outer join и т. Д.

0 голосов
/ 22 октября 2018

Вы можете сделать другой случай

Select instrID
from Plays P
where P.ssn in (
  select ssn 
  from Musicians M
  where 
  M.aname='John');
0 голосов
/ 22 октября 2018

Ключевое слово CONTAINS MySQL применимо только при работе с пространственными данными, поэтому оно не должно работать с вашим текущим запросом.

Я подозреваю, что все, что вам действительно нужно здесь, это простое соединение:

SELECT p.instrID
FROM Plays p
INNER JOIN Musicians m
    ON p.ssn = m.ssn
WHERE m.aname = 'John';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...