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
Tôi nghĩ rằng đó là những gì bạn đang cố gắng để làm, phải không?
Như bạn đã nói rằng số cột khác nhau, bạn sẽ cần chỉ định các cột, ví dụ:
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
Trong ví dụ này, riêng tư có cột col1, col2 và col3, trong khi công ty có col1 và col4, nhưng bạn muốn tất cả.
Tôi không biết tại sao bây giờ tôi nhận được # 1222 - Các câu lệnh SELECT được sử dụng có số cột khác nhau – plugowski
nếu tôi chỉ sử dụng một phần của mã tức là. SELECT * FROM người dùng LEFT JOIN tin AS chi tiết ON users.id = details.user_id ĐÂU users.id = 1 AND users.type = 1 nhưng nếu tôi sử dụng UNION Tôi đã nhận được lỗi # 1222 – plugowski
Nếu bạn có một số cột khác nhau trong hai bảng (riêng và công ty) thì bạn sẽ cần phải xác định cùng một số cột trong SELECT. Bạn có thể điền vào các khoảng trống bằng cách sử dụng NULL, '', hoặc bất cứ điều gì bạn muốn. – Cez