2014-10-30 3 views
0

Это работает хорошо, но теперь я хотел бы присоединиться к третьей таблице, называемой «дома». Но только если houses.owner равно p.id. Если нет houses.owner, равный p.id, не выбирайте.Проблемы с UNION MySQL

Текущий SQL, который работает

-- Select player AND if he is member of a guild then get rank and guild 
SELECT p.id, p.account_id, p.group_id, p.name, p.sex, p.level, p.vocation, p.town_id, p.lastlogin, p.comment, p.deleted, p.online, p.rank_id, gr.name AS rank, g.name AS guild 
     FROM players p 
     INNER JOIN guild_ranks gr ON gr.id = p.rank_id 
     INNER JOIN guilds g ON g.id = gr.guild_id 
     WHERE p.name = :name and p.rank_id > 0 
     UNION ALL 
      SELECT p.id, p.account_id, p.group_id, p.name, p.sex, p.level, p.vocation, p.town_id, p.lastlogin, p.comment, p.deleted, p.online, p.rank_id, '' AS rank, '' AS guild 
      FROM players p 
      WHERE p.name = :name AND p.group_id < 5 AND p.rank_id = 0 

Я попытался добавить:

, но это дает мне:

The used SELECT statements have a different number of columns 
+0

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

+0

Устранение неполадок, удалив все столбцы, затем медленно добавьте их обратно. Начните с буквенного '1', затем используйте' p.id', затем 'p.id, p.account_id' и т. Д., Пока запрос не сломается. –

ответ

0

p.rank_id, '' AS ранга, '' AS гильдией

Вопрос второй.

Первый запрос имеет 3 столбца, где это 2. Добавьте еще один столбец, и он будет работать. Кажется, вам нужен ранг и гильдия, где вы являетесь гильдией suppinibg со строкой в ​​качестве ранга