Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Mysql chọn với logic có điều kiện

SELECT days.meta_value
FROM tableName AS from_country,
     tableName AS to_country,
     tableName AS days
WHERE from_country.item_id = to_country.item_id
  AND from_country.item_id = days.item_id
  AND from_country.field_id = 90
  AND to_country.field_id = 93
  AND days.field_id = 251

Bạn có thể thêm các hạn chế khác nếu muốn lọc theo from_country.meta_value hoặc tương tự. Và bạn nên thay thế tableName với tên thực của bảng.

Hãy nghĩ về from_country , to_countrydays dưới dạng ba con trỏ khác nhau đến các hàng trong bảng của bạn hoặc các biến khác nhau nhận các giá trị từ mối quan hệ của bạn. Bạn muốn cả ba người trong số họ mô tả cùng một mục và bạn cũng muốn mỗi người trong số họ tham chiếu đến trường được liên kết với tên của nó. Điều này dẫn đến các điều kiện đã nêu ở trên.

Bạn thậm chí có thể tạo một chế độ xem, để truy cập vào bảng được thiết kế xấu này giống như một bảng được thiết kế đúng cách:

CREATE VIEW viewName AS
SELECT item.item_id AS item_id,
       from_country.meta_value AS from_country,
       to_country.meta_value AS to_country,
       days.meta_value AS days
FROM (SELECT DISTINCT item_id FROM tableName) AS item
     LEFT JOIN tableName AS from_country
            ON (from_country.item_id = item.item_id AND
                from_country.field_id = 90)
     LEFT JOIN tableName AS to_country
            ON (to_country.item_id = item.item_id AND
                to_country.field_id = 93)
     LEFT JOIN tableName AS days
            ON (days.item_id = item.item_id AND
                days.field_id = 251)

Điều này sẽ tạo ra một chế độ xem có bốn cột, từ đó bạn có thể chỉ cần chọn:

SELECT days FROM viewName WHERE from_country LIKE 'A%'

hoặc bất cứ thứ gì bạn muốn chọn. Lưu ý rằng do các phép nối bên trái, giá trị bị thiếu cho một số mục sẽ dẫn đến NULL các giá trị. Điều này trái ngược với truy vấn ở trên, sẽ bỏ qua bất kỳ mục nào không có cả ba giá trị được chỉ định. Sử dụng bất cứ điều gì thích hợp hơn trong hoàn cảnh của bạn.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Lưu trữ hình ảnh trong cơ sở dữ liệu trực tiếp hay dưới dạng dữ liệu base64?

  2. Tôi có thể hoàn tác bảng ALTER trong - MySQL không?

  3. Lệnh gọi UPSERT chuẩn SQL

  4. Kết nối nhiều bảng trong các cơ sở dữ liệu khác nhau? MySql

  5. Chèn dữ liệu blob trong Java bằng PreparedStatement