Поиск в нескольких таблицах - результат в виде одного столбца

0

Привет, 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.

Надеюсь, что это поможет правильному специалисту:)

Теги:

4 ответа

2
Лучший ответ

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 будет более подходящим.

  • 0
    Это именно то, что я хочу :) спасибо и много за ваш интерес в моем вопросе ко всем троим :)
  • 0
    Я понимаю вашу точку зрения. Но как мне убедиться в том, что если, например, у Metallica есть заглавная песня с названием Metallica, то это слово только один раз?
Показать ещё 2 комментария
1

Вам нужно соединение:

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%')
  • 0
    Я не читал одну часть колонки, пожалуйста, не обращайте внимания на мой ответ.
  • 0
    нп, спасибо все равно :)
0

вы хотите использовать SQL UNION

select id, artist, count FROM table1
UNION
select id, title, artistid from table2

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

0

Используйте 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 результаты запроса.

  • 0
    Это то, что у меня есть сейчас: выбрать отличное (исполнитель) КАК предложить от tab_artist ГДЕ художник НРАВИТСЯ ('ma%') объединение всех выбрать отличное (songtitle) КАК предложить от tab_songtitle ГДЕ songtitle НРАВИТСЯ ('ma%') Это даст мне металлику только один раз, даже если есть художник и название песни по имени Metallica?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню