2012-05-18 61 views
5

Làm thế nào tôi có thể chọn cột khác nhau từ hai bảng khác nhau, chẳng hạn như:select * from hai bảng với nhau # cột

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

Tôi nhận được một lỗi "#1222 - The used SELECT statements have a different number of columns". Từ những gì tôi hiểu UNION sẽ không hoạt động,

Có cách nào để thực hiện việc này, vì tôi cần số lượng cột và hàng không bằng nhau không có mục nhập tương tự/tương tự trong hai bảng (tức là user1 không được liệt kê trong bảng 1)?

Điều này có thể không được thực hiện trong một truy vấn không?

cảm ơn bạn!

+0

Thông thường điều này sẽ được xử lý bởi hai truy vấn chọn riêng biệt ... – mellamokb

+0

Không có cách nào để thực hiện điều này trong một truy vấn để tôi có tất cả các biến cùng một lúc không? –

+0

Nó * là * có thể nhưng việc tạo hai truy vấn trở nên dễ dàng hơn nhiều, sau đó thử kludge để kết hợp các kết quả vào một truy vấn đơn lẻ. Nó cũng sẽ khó khăn hơn nhiều để đọc kết quả đúng cách. – mellamokb

Trả lời

6

Bạn có thể fake các cột bị thiếu bằng bí danh - ví dụ:

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

nơi tên là trong table2, nhưng không phải trong table1

Trừ khi bạn là LIÊN HIỆP khó hiểu với NỐI:

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

này sẽ kết hợp cả hai bảng, vì vậy bạn sẽ có được tất cả các cột trên cùng một hàng.

+0

hmm rất thú vị –

+1

Đây là câu trả lời giống như tôi đã nói. Tuy nhiên, nó vẫn có vẻ rất vô nghĩa để làm điều này và ít bảo trì trong thời gian dài. – mellamokb

+0

tuyệt vời, nếu đây là sự đồng thuận (mà tôi tin là vậy) thì tôi đồng ý rằng tôi sẽ có một thời gian dễ dàng hơn với các truy vấn riêng biệt. Cảm ơn bạn đã giúp đỡ! –

5

Nếu không có mục nhập tương tự hoặc tương tự trong hai bảng, đây phải là hai câu lệnh chọn khác nhau.

SELECT username, email FROM `table1`; 


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

Động lực của bạn để làm việc khác là gì?

Các mục nhập trong table2 có liên quan đến table1 không? join có phù hợp hơn không?

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

Tôi có thể sẽ thực hiện các truy vấn riêng biệt vì không có mục liên quan nào. Tôi chỉ quan tâm đến khả năng. Cảm ơn thông tin chi tiết của bạn! –

3

Trong bảng với các cột hẹp, hãy thử

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

vv để làm cho họ cùng một số cột.

Các vấn đề liên quan