2016-11-30 14 views
0

如何選擇從User表中的一些信息(例如NAMESURNAME),其中,在Option表,我要選擇具有選擇權20,也是選項25,例如信息的用戶?如何選擇條件爲多行的信息?

在這個例子中,我要選擇的用戶1NAMESURNAME因爲它有兩個選項2025唯一的一個。

Option

+---------+---------+ 
| ID_USER | OPTIONS | 
+---------+---------+ 
| 1  | 20  | 
+---------+---------+ 
| 1  | 25  | 
+---------+---------+ 
| 2  | 20  | 
+---------+---------+ 
| 3  | 25  | 
+---------+---------+ 

User

+---------+---------+----------+ 
| ID_USER | NAME | SURNAME | 
+---------+---------+----------+ 
| 1  | Jean | Baptiste | 
+---------+---------+----------+ 
| 2  | Henry | Charles | 
+---------+---------+----------+ 
| 3  | Jacques | François | 
+---------+---------+----------+ 

結果表

+------+----------+ 
| NAME | SURNAME | 
+------+----------+ 
| Jean | Baptiste | 
+------+----------+ 
+0

以表格格式指定預期結果。 – jarlh

+0

只是一個說明,不應該這是一個多對多的關係?一個用戶可以有一個或多個選項,一個選項可以屬於一個或多個用戶? – Markinson

回答

0

做一個JOIN得到的組合,用WHERE濾除預期的選擇。 GROUP BY加上HAVING COUNT DISTINCT以確保20和25值都在那裏。

select u.NAME, u.SURNAME 
from User u 
join Option o on o.ID_USER = u.ID_USER 
where o.options IN (20, 25) 
group by u.NAME, u.SURNAME 
having count(distinct o.options) = 2 

注:USER是ANSI SQL的保留字,所以你可能需要界定它作爲。

+0

謝謝,正是我想要的=>確保20和25值都在那裏 – Derwaan

0

不知道我理解你的問題,但我認爲下面的選擇會做:

SELECT NAME , SURENAME 
    FROM User 
WHERE ID_User IN (SELECT ID_User 
        FROM Option 
        WHERE OPTIONS IN (20,25) 
       ) 
0

試試這個:

SELECT u.name,u.surname 

FROM user u, option o 

WHERE u.id_user=o.id_user 

AND o.options IN (20,25)