SELECT * FROM users
LEFT JOIN private AS details ON users.id = details.user_id
WHERE users.id = 1 AND users.type = 1
UNION
SELECT * FROM users
LEFT JOIN company AS details ON users.id = details.user_id
WHERE users.id = 1 AND users.type != 1
Je pense que c'est ce que vous essayez de faire, est-ce pas?
Comme vous avez maintenant indiqué que le nombre de colonnes est différent, vous devez spécifier les colonnes, par ex.
SELECT 'private' AS detailType, users.*, col1, col2, col3, '' FROM users
LEFT JOIN private AS details ON users.id = details.user_id
WHERE users.id = 1 AND users.type = 1
UNION
SELECT 'company', users.*, col1, '', '', col4 FROM users
LEFT JOIN company AS details ON users.id = details.user_id
WHERE users.id = 1 AND users.type != 1
Dans cet exemple, a privé les colonnes col1, col2 et col3, tandis que la société a col1 et col4, mais vous les voulez tous.
Je ne sais pas pourquoi maintenant j'ai # 1222 - Les instructions SELECT utilisées ont un nombre différent de colonnes – plugowski
si j'utilise seulement une partie de code ie. SELECT * FROM utilisateurs LEFT JOIN privé que des détails sur users.id = details.user_id OÙ users.id = 1 ET users.type = 1 mais si j'utilise UNION J'AVONS obtenir erreur # 1222 – plugowski
Si vous avoir un nombre différent de colonnes dans les deux tables (privé et entreprise), vous devrez spécifier le même nombre de colonnes dans le SELECT. Vous pouvez remplir les espaces en utilisant NULL, '', ou ce que vous voulez. – Cez