Так вы можете это сделать - но лучше было бы разделить запросы.
SELECT *, clients.id as client_id FROM clients_table ...
UNION SELECT settings.values, NULL, NULL, NULL... AS statuses
SELECT setting.il_values, NULL, NULL, NULL... AS currencies ...
Вы добавляете столько столбцов NULL, сколько необходимо для того, чтобы SELECT имели одинаковое количество строк. Тогда вы получите:
User Email Password id
john ... ... 613
active NULL NULL NULL
dollar NULL NULL NULL
Вы явно хотите получить оба настройки и валюты и различать их, но так как вы запустите один выбрать любой столбец будет иметь только один имя. Поэтому первый столбец будет либо «Пользователь», либо «настройка» или «валюта», но никогда не будет * правильного значения ».
Если вы хотите собрать всю информацию одним махом, вам необходимо отказаться от" *»синтаксис и сделать что-то вроде:
SELECT 'userinfo' as wtf, User, Name, Email, ... FROM customers
UNION
SELECT 'setting' as wtf, value, keyname, null, ... FROM settings
UNION
SELECT 'currency' as wtf, value, null, null, ... FROM currencies
и это даст вам:.
wtf User Password
userinfo John whatever ...
setting 800x600 resolution NULL
setting Mozilla browser NULL
currency dollar NULL NULL
, который позволит вам сказать, что есть что
Несмотря на это, вы не будете способный ми x надежных типов данных (зависит от вашего уровня DA приложения). Поэтому, если у вас есть столбец «exchange_rate» в валютах, который является NUMERIC, и он соответствует столбцу пользователя «Пароль», все может случиться. Обычно Мерфи - Мерфи, чего бы ты не хотел.
Чтобы избежать этого, если это становится проблемой, вам нужно добавить дополнительный столбец соответствующего типа во все таблицы, у которых его нет, и дать ему соответствующее значение (NULL, или 0.0 или что-то еще) ,
Это не так, потому что обе таблицы имеют столбец с идентификатором имени, но поскольку ваши операторы 'select' имеют разные числа столбцов, как ясно говорится об ошибке. Первый 'select' имеет n + 1 столбцов, где n - количество столбцов в' clients_table', следующие 2 оператора 'select' имеют только 1 столбец. – TobyLL
хорошо спасибо, но как я могу это исправить? –
Запросы UNION должны иметь одинаковое количество столбцов в каждом 'SELECT'. Вы можете добавить правильное количество столбцов «NULL» в свои операторы SELECT (например, «SELECT settings.values AS status, NULL, NULL, ...», но не зная, чего вы пытаетесь достичь, Знаете ли, это хорошая идея или нет. – TobyLL