Привет, stackoverflow. Это мой первый вопрос.
У меня есть 2 таблицы в моем mySQLdb.
[tab_artist]
|id|artist|count
[tab_songtitle]
|id|songtitle|artistId
Я пытаюсь выбрать из tab_artist.artist и tab_songtitle.songtitle, как подскажите, где searchclause = m
Я пробовал это
SELECT artist, songtitle AS suggest
FROM tab_artist, tab_songtitle
WHERE artist LIKE('m%') OR songtitle LIKE('m%')
Но это дает мне 2 столбца, художник и предлагаю
Если поиск выполняется, мне нужен художник, чтобы дать мне, например. metallica.. но только один раз - но в названиях песен мне нужны все названия, начиная с met.
Надеюсь, что это поможет правильному специалисту:)
A union
должен сделать это:
select artist AS suggest from tab_artist WHERE artist LIKE 'm%'
union all
select songtitle AS suggest from tab_songtitle WHERE songtitle LIKE 'm%'
В этом случае я бы использовал union all
, чтобы вы не удалили дубликаты, но вы можете захотеть этого, если, например, Metallica имеет одноименный альбом, и вы хотите, чтобы слово отображалось один раз. В этом случае union
будет более подходящим.
Вам нужно соединение:
Select artist, songtitle from tab_artist inner join tab_songtitle on tab_songtitle.artistID = tab_artist.ID where artist LIKe ('m%') OR songtitle like ('m%')
вы хотите использовать SQL UNION
select id, artist, count FROM table1
UNION
select id, title, artistid from table2
В основном он объединяет два результирующих набора по вертикали. Существуют некоторые ограничения и модификации, но в целом это все, что вам нужно сделать.
Используйте UNION ALL
, чтобы объединить результаты из таблиц исполнителя и песни.
SELECT 'Artist' AS type, id, artist AS suggest
FROM tab_artist
WHERE artist LIKE 'm%'
UNION ALL
SELECT 'Song', id, songtitle
FROM tab_songtitle
WHERE songtitle LIKE 'm%'
Не используйте UNION
, как предполагают некоторые, так как это сделает ненужные (и дорогие) DISTINCT
результаты запроса.