Chọn hai giá trị từ cùng một bảng nhưng trong các điều kiện khác nhau


8

Tôi muốn lấy một giá trị từ một bảng thành hai cột khác nhau cho các giá trị khác nhau từ cùng một bảng. Sử dụng truy vấn này làm ví dụ (chú ý cách chọn trên cùng một bảng được đặt bí danh là 2 bảng khác nhau):

SELECT a.myVal, b.myVal 
FROM MyTable a, MyTable b
WHERE 
  a.otherVal = 100 AND
  b.otherVal = 200 AND
  a.id = b.id

Khi tôi chạy một truy vấn tương đối đơn giản như thế này trên tập dữ liệu của mình, nó hoạt động - nó chỉ mất một thời gian dài. Có cách nào tốt hơn / thông minh hơn để viết truy vấn này không?

Câu trả lời:


10

Để dễ đọc, tôi sẽ viết lại truy vấn bằng cú pháp nối hiện đại hơn. Điều này sẽ phân tách rõ ràng các điều kiện tham gia của bạn khỏi các bộ lọc của bạn.

select a.myVal,
       b.myVal
  from MyTable a
  join MyTable b on b.id = a.id
where a.OtherVal = 100
  and b.Otherval = 200

Đối với hiệu suất, đảm bảo bạn có chỉ số thích hợp. Trong ví dụ giới hạn này, lý tưởng nhất là bạn sẽ có một chỉ mục được nhóm trên ID và một chỉ mục không được phân cụm trên OtherVal.

Tuy nhiên, sau khi xem truy vấn của bạn, tôi không thể biết chính xác bạn đang cố gắng thực hiện điều gì.


để thêm vào @datagod: SELECT a.column, b.column FROM table AS a, table AS b WHERE a.column=x AND b.column=ycó thể là một cách khác để tránh sử dụng JOIN(khi không cần thiết).
wolfram77

1
@ wolfram77, đó vẫn là một tham gia.
datagod

4

Bạn có thể sử dụng nhóm và tổng hợp có điều kiện, như thế này:

SELECT
  id,
  MAX(CASE OtherVal WHEN 100 THEN MyVal END) AS MyVal1,
  MAX(CASE OtherVal WHEN 200 THEN MyVal END) AS MyVal2
FROM MyTable
WHERE OtherVal IN (100, 200)
GROUP BY
  id
;
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.