2017-04-18 15 views
5

Tôi có một bảng như thế này:Chọn các bản ghi từ bảng nếu giá trị nhất định tồn tại, nếu không, chọn hồ sơ khác

projectName | info 
-------------------- 
    all | i1 
    all | i2 
    all | i3 
    name1 | i4 
    name1 | i5 
    all | i6 

Tôi có một truy vấn để kiểm tra tên dự án. Nếu nó tồn tại trong bảng, tôi phải chỉ chọn thông tin liên quan đến dự án cụ thể đó. Nếu nó không tồn tại, tôi phải lấy thông tin cho các dự án 'tất cả'.

Ví dụ, nếu tôi nhập của tôi là 'name1', đầu ra của tôi nên là:

i4 
i5 

Nếu entry của tôi là 'name2', đầu ra của tôi nên là:

i1 
i2 
i3 
i6 

Có một cách tôi có thể làm điều này trong một truy vấn mysql? Tôi đã tìm kiếm các ví dụ nhưng mọi thứ tôi tìm thấy là lấy thông tin từ hai bảng khác nhau.

+0

Tại sao bạn cần phải làm điều này trong một truy vấn MySQL? Điều này có thể dễ dàng hơn trong ứng dụng của bạn. –

+0

@JeffersonLima Tôi chỉ tò mò về nó, thực sự. Tôi sẽ làm điều đó trong ứng dụng của tôi nếu tôi không thể làm việc này. – Bizzys

Trả lời

4

Một cách là sử dụng UNION ALL:

SELECT info 
FROM mytable 
WHERE projectName = 'name1' 

UNION ALL 

SELECT info 
FROM mytable 
WHERE projectName = 'all' AND 
     NOT EXISTS (SELECT 1 
        FROM mytable 
        WHERE projectName = 'name1') 

Demo here

3
select * from projects 
where projectName = case when exists (select * from projects where projectName = 'name1') 
    then 'name1' 
    else 'all' 
end 
+0

nhưng bạn đang xuất tên dự án thay vì thông tin dự án – dsharew

+0

@dsharew Tôi xuất tất cả các cột 'select *'. Bạn vẫn có thể chọn bất kỳ cột nào bạn muốn từ bảng. –

+0

có giải pháp rất đẹp – dsharew

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