2012-05-18 2 views
5

Как бы я выбирать различные столбцы из двух разных таблиц, такие как:выбрать * из двух таблиц с различными # колоннами

SELECT username, email FROM `table1` 
UNION 
SELECT * FROM `table2` WHERE username = 'user1'; 

Я получаю сообщение об ошибке "#1222 - The used SELECT statements have a different number of columns". Из того, что я понимаю, UNION не будет работать,

Есть ли способ сделать это, так как я должен был бы неравное количество столбцов и строк и там не нет взаимных/подобные записи в двух таблицах (т.е. user1 не перечисленные в таблице 1)?

Нельзя ли это сделать в одном запросе?

спасибо!

+0

Обычно это обрабатывается двумя отдельными запросами на выбор ... – mellamokb

+0

Невозможно сделать это в одном запросе, чтобы у меня были все переменные одновременно? –

+0

Это * возможно, но гораздо проще сделать два запроса, а затем попробовать kludge объединить результаты в один запрос. Также будет намного труднее правильно прочитать результаты. – mellamokb

ответ

6

Вы можете fake недостающие столбцы, используя псевдоним - например,

SELECT username, email, '' as name FROM `table1` 
UNION 
SELECT username, email, name FROM `table2` 
WHERE username = 'user1'; 

где имя в table2, но не в table1

Если вы не запутанные СОЮЗЫ с JOINS:

SELECT table1.*, table2.* FROM 
table1 INNER JOIN table2 
ON table1.username = table2.username 

это было бы объединить обе таблицы, так что вы получите все столбцы той же строки.

+0

hmm очень интересно –

+1

Это тот же ответ, который я бы сказал. Тем не менее, по-прежнему представляется совершенно бессмысленным делать это и в меньшей степени поддерживать его в долгосрочной перспективе. – mellamokb

+0

круто, если это консенсус (я считаю, что это так), то я согласен, что мне будет проще с отдельными запросами. Спасибо за вашу помощь! –

5

Если в обеих таблицах нет взаимных или подобных записей, это должны быть два разных оператора выбора.

SELECT username, email FROM `table1`; 


SELECT * FROM `table2` WHERE username = 'user1'; 

Какова ваша мотивация для этого?

Имеются ли записи в table2, связанных с table1? Будет ли более подходящим join?

SELECT t1.username, t1.email, t2.* 
FROM table1 t1 
    JOIN table2 t2 ON t1.username = t2.username 
WHERE t1.username = 'user1'; 
+0

Я, вероятно, в конечном итоге сделаю отдельные запросы, так как нет соответствующих записей. Меня просто интересовала возможность. Спасибо за понимание! –

3

В таблице с меньшим количеством столбцов, попробуйте

SELECT *, 0 as col1, 0 as col2, ... 

и т.д., с тем чтобы сделать их одинаковое количество столбцов.

Смежные вопросы