#mysql #database #mariadb
#mysql #База данных #mariadb
Вопрос:
У меня есть 2 таблицы в моей базе данных (до сих пор), одна для хранения имен исполнителей, а другая для хранения песен (название и текст песни), но мне нужно использовать одну SELECT
для поиска внутри имени исполнителя, названия песни и текста песни одновременно, но я получаю частичный результат и много 1292 ошибки.
Таблица песен (песни)
song_id
artist_id
song_name VARCHAR
song_lyric TEXT
Таблица художников (художники)
artist_id
artist_name
Моя первая идея SQL была LEFT JOIN
примерно такой:
SELECT s.song_name AS SONG, s.song_id AS ID FROM songs AS s
LEFT JOIN artists AS a ON s.song_id = a.artist_id
WHERE s.song_name OR s.song_lyric OR a.artist_name LIKE '%some value%'
Это SELECT
дает результат, если я использую имя исполнителя (если у меня есть уникальное имя), но если я попробую какое-нибудь регулярное выражение, например ‘Sun’, ‘Son’, я получу пустой набор результатов.
Любая помощь будет приветствоваться
Комментарии:
1.
WHERE s.song_name LIKE '%some value%' OR s.song_lyric LIKE '%some value%' OR a.artist_name LIKE '%some value%'
2. Каков ваш ожидаемый результат?. Почему вы используете
s.song_id = a.artist_id
inLEFT JOIN
?3. Я хочу, чтобы идентификатор, подобный скрытому полю (в Lazarus), создавал другой поиск, а название песни основывалось на имени исполнителя, названии песни или некоторых текстах.
Ответ №1:
SELECT s.song_name AS SONG, s.song_id AS ID FROM songs AS s
LEFT JOIN artists AS a ON s.artist_id = a.artist_id
WHERE s.song_name LIKE '%some value%' OR s.song_lyric LIKE '%some value%'
OR a.artist_name LIKE '%some value%'
Ответ №2:
попробуй это.
SELECT s.song_name AS SONG, s.song_id AS ID FROM songs AS s LEFT JOIN artists
AS a ON s.artist_id = a.artist_id WHERE s.song_name LIKE '%some value%' OR
s.song_lyric LIKE '%some value%' OR a.artist_name LIKE '%some value%'