2013-02-18 57 views
12

Tôi có một cơ sở dữ liệu mySQL được gọi là listDB có chứa một số bảng có tên cột Product v.v. Tôi muốn SELECT từ tất cả các bảng trong đó Product Like% XYZ% và hiển thị kết quả tìm kiếm trong một bảng riêng biệt.Chọn từ tất cả các bảng - MySQL

Tôi cố gắng này:

SELECT * FROM * WHERE Product LIKE %XYZ% 

Nhưng nó không phải đang làm việc. Truy vấn thích hợp cho mục đích này là gì?

+2

sử dụng 'union' ..' UNION được sử dụng để kết hợp kết quả từ nhiều câu SELECT vào một tập kết quả duy nhất. ' –

+1

Hãy thử SELECT * FROM listDB này. * WHERE Product LIKE '% XYZ%'; – Parvathy

+0

@Parvathy - Truy vấn này không hoạt động ..Lỗi cú pháp xảy ra –

Trả lời

3

Như Suhel Meman nói trong các ý kiến:

SELECT column1, column2, column3 FROM table 1 
UNION 
SELECT column1, column2, column3 FROM table 2 
... 

sẽ làm việc.

Nhưng tất cả SELECTS của bạn sẽ phải bao gồm cùng một lượng cột. Và bởi vì bạn đang hiển thị nó trong một bảng kết quả, chúng nên chứa cùng một thông tin.

Điều bạn có thể muốn làm, là JOIN trên ID sản phẩm hoặc điều gì đó tương tự. Bằng cách này, bạn sẽ nhận được nhiều cột hơn, điều này có ý nghĩa hơn hầu hết thời gian.

7

Bạn nhận được tất cả các bảng có chứa các sản phẩm cột sử dụng Statment này:

SELECT DISTINCT TABLE_NAME 
    FROM INFORMATION_SCHEMA.COLUMNS 
    WHERE COLUMN_NAME IN ('Product') 
     AND TABLE_SCHEMA='YourDatabase'; 

Sau đó, bạn phải chạy một cursor trên các bảng, do đó bạn chọn eachtime:

Select * from OneTable where product like '%XYZ%' 

Các kết quả nên được nhập vào bảng hoặc chế độ xem thứ 3, hãy xem here.

Lưu ý: Điều này có thể chỉ hoạt động nếu cấu trúc của tất cả bảng tương tự, nếu không bạn sẽ phải xem cột nào được thống nhất cho tất cả các bảng này và tạo bảng kết quả/Xem để chỉ chứa các cột này.

2

Bạn có thể nhận được tất cả các bảng có cột "sản phẩm" từ bảng information_schema

SELECT DISTINCT table_name FROM information_schema.columns WHERE column_name ="Product"; 

cũng không tạo ra một thủ tục

delimiter // 
CREATE PROCEDURE curdemo() 
BEGIN 
    DECLARE a varchar(100); 
    DECLARE cur1 CURSOR FOR SELECT DISTINCT table_name FROM information_schema.columns WHERE column_name ="Product"; 
    OPEN cur1; 

    read_loop: LOOP 
    FETCH cur1 INTO a; 

    SELECT * FROM a; 

    END LOOP; 

    CLOSE cur1; 
END; 

delimiter ; 

call curdemo(); 
2

lý do tại sao bạn không chỉ đổ cơ sở dữ liệu mysql nhưng với phần mở rộng khi bạn chạy mà không có - giao dịch đơn lẻ, bạn sẽ ngắt kết nối với các khách hàng khác:

mysqldump --host=hostname.de --port=0000 --user=username --password=password --single-transaction --skip-add-locks --skip-lock-tables --default-character-set=utf8 datenbankname > mysqlDBBackup.sql 

sau đó đọc tệp và tìm kiếm những gì bạn muốn .... trong Chuỗi .....

3
SELECT product FROM Your_table_name WHERE Product LIKE '%XYZ%'; 

Tuyên bố trên sẽ hiển thị kết quả từ một bảng. Nếu bạn muốn thêm nhiều bảng hơn thì chỉ cần sử dụng câu lệnh UNION.

SELECT product FROM Table_name_1 
WHERE Product LIKE '%XYZ%' 
UNION 
SELECT product FROM Table_name_2 
WHERE Product LIKE '%XYZ%' 
UNION 
SELECT product FROM Table_name_3 
WHERE Product LIKE '%XYZ%' 

... và vân vân

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