2010-05-26 28 views
7

Nếu tôi có hai bảng trong mysql có cột tương tự ...Trong mySQL, có thể chọn từ hai bảng và hợp nhất các cột không?

TABLEA 
    id 
    name 
    somefield1 

TABLEB 
    id 
    name 
    somefield1 
    somefield2 

Làm thế nào để cấu trúc một câu lệnh SELECT để tôi có thể CHỌN từ hai bảng cùng một lúc, và có bộ kết quả sáp nhập cho các cột giống nhau?

Vì vậy, ví dụ, tôi hy vọng để làm một cái gì đó giống như ...

SELECT name, somefield1 FROM TABLEA, TABLEB WHERE name="mooseburgers"; 

... và có tên, và cột somefield1 từ hai bảng sáp nhập với nhau trong tập kết quả.

Cảm ơn sự giúp đỡ của bạn! sản lượng

Sample nối vì câu hỏi không rõ ràng:

Tôi muốn các hàng từ table1 và table2 hàng từ nối trong resultset. Ví dụ, nếu các bảng chứa

TABLEA 
id(1) name(zoot) somefield(suit) 

TABLEB 
id(1) name(zoot) somefield(flute) 

The resultet would look like: 

name  |  somefield1 
zoot   suit 
zoot   flute 
+0

Bạn có ý nghĩa gì khi "hợp nhất"? Vui lòng cung cấp đầu ra mẫu. – RedFilter

Trả lời

7

Bạn có thể kết hợp các cột từ cả hai bảng sử dụng (id, name) làm tiêu chí tham gia với:

select 
    a.id        as id, 
    a.name        as name, 
    a.somefield1 || ' ' || b.somefied1 as somefield1 
from tablea a, tableb b 
where a.id = b.id 
    and a.name = b.name 
    and b.name = 'mooseburgers'; 

Nếu bạn muốn tham gia vào chỉ (id) và kết hợp tên và somefield1 cột:

select 
    a.id        as id, 
    a.name || ' ' || b.name   as name, 
    a.somefield1 || ' ' || b.somefied1 as somefield1 
from tablea a, tableb b 
where a.id = b.id 
    and b.name = 'mooseburgers'; 

Mặc dù tôi phải thừa nhận đây là một cách khá bất thường làm việc. Tôi giả sử bạn có lý do của bạn tuy nhiên :-)

Nếu tôi đã hiểu lầm câu hỏi của bạn và bạn chỉ muốn một liên minh truyền thống hơn trong hai bảng, sử dụng một cái gì đó như:

select id, name, somefield1, '' as somefield2 from tablea where name = 'mooseburgers' 
union all 
select id, name, somefield1, somefield2 from tableb where name = 'mooseburgers' 

này sẽ không kết hợp hàng nhưng thay vào đó sẽ chỉ thêm các hàng từ hai truy vấn. Sử dụng riêng union nếu bạn muốn xóa các hàng trùng lặp nhưng nếu bạn chắc chắn không có trùng lặp hoặc bạn không muốn chúng bị xóa, union all thường hiệu quả hơn.


Dựa trên chỉnh sửa của bạn, truy vấn thực tế sẽ là:

select name, somefield1 from tablea where name = 'zoot' 
union all 
select name, somefield1 from tableb where name = 'zoot' 

(hoặc union nếu bạn không muốn bản sao nơi a.name==b.name=='zoot'a.somefield1==b.somefield1).

+0

Cảm ơn bạn. Xin lỗi nếu câu hỏi của tôi không rõ ràng. Có, tôi chỉ muốn nối thêm các hàng từ hai bảng. Và hãy chắc chắn rằng cột somefield1 từ Table1 và somefield1 từ Table2 cả hai xuất hiện dưới cột đơn số 1 trong resultset. – Travis

2

Tôi không chắc chắn những gì bạn có nghĩa là bằng cách hợp nhất, nhưng bạn có thể UNION kết quả:

SELECT id, name, somefield1 FROM TABLEA WHERE name="mooseburgers" 
union all 
SELECT id, name, somefield1 FROM TABLEB WHERE name="mooseburgers"; 
0

Bạn có lẽ có nghĩa là

SELECT tableA.id, tableA.name, tableA.somefield1 
FROM tableA, tableB 
WHERE tableA.name = tableB.name AND tableA.name="mooseburgers" 
0

Tùy thuộc vào ý bạn bằng cách hợp nhất, đây là giải pháp khả thi.

Select id,name,somefield1 from TableA 
WHERE Name ='mooseburgers' 
UNION 
Select id,name,somefield1 from TableB 
WHERE Name ='mooseburgers' 

Sẽ cho phép bạn hiển thị kết quả từ cả hai bảng với kết quả được hợp nhất thành 1 bảng.

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