MySQL НРАВИТСЯ на подзапрос - PullRequest
       5

MySQL НРАВИТСЯ на подзапрос

0 голосов
/ 16 февраля 2020

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

В таблице есть только половина - дюжина записей, содержащих имена авторов, но в некоторых случаях в поле присутствует более одного автора, и мне нужно получить их отдельные биографии. Сейчас это не дает ошибок, но выводит только одну запись, которая содержит имена обоих авторов, а не две, которые содержат реальные биографии. Мне нужны только две записи с одним именем, не одна, содержащая обе, но она дает противоположное.

AuthorName имеет что-то вроде этого:

Joe Blow
Jane Doe
Jow Blow and Jane Doe

и вот запрос

SELECT a.`ID` AS AuthorID, `AuthorName`, `AuthorPhoto`, `AuthorBio`, `Email`,
FROM authorbiographies a 
WHERE `AuthorName` LIKE CONCAT('%',(
SELECT `AuthorName` )
FROM authorbiographies WHERE `AuthorName` LIKE '% and %),'%'
) 
AND `ID` <> 3

Ответы [ 2 ]

1 голос
/ 16 февраля 2020

Эту проблему можно решить путем объединения производных таблиц всех authorname с, которые не включают and, с производными таблицами всех authorname с, включающими and, до тех пор, пока первые authorname является частью второго:

SELECT a1.id, a1.authorname, a1.authorbio
FROM (SELECT *
      FROM authorbiographies
      WHERE authorname NOT LIKE '% and %'
      ) a1
JOIN (SELECT *
      FROM authorbiographies
      WHERE authorname like '% and %'
      ) a2 on a2.authorname LIKE concat('%', a1.authorname, '%')

Вывод (для вашего примера)

id  authorname  authorbio
1   Joe Blow    has lived a long time
2   Jane Doe    wrote several books

Демонстрация по SQLFiddle

0 голосов
/ 16 февраля 2020

Разве это не делает то, что вы хотите?

SELECT ab.*
FROM authorbiographies ab
WHERE ab.authorname NOT LIKE '% and %';

Кажется, вы просто хотите выделить строки, в которых нет ' and '.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...