2014-03-05 79 views
1

我有問題找到條件的記錄在哪裏。我想找到所有的課程,其中有旗幟/旗幟。MySQL - 內部連接與WHERE子句

記錄爲當然表:

+----+------+-----------------+ 
| id | code |  name  | 
+----+------+-----------------+ 
| 1 | JPA | JPA Lorem ipsum | 
| 2 | JSF | Jsf lorem ipsum | 
+----+------+-----------------+ 

記錄爲course_flags表:

+----+-----------+---------+ 
| id | course_id | flag_id | 
+----+-----------+---------+ 
| 1 | 1   | 1  | 
| 2 | 1   | 2  | 
+----+-----------+---------+ 

我的第一個查詢:(好)

SELECT `course`.`id`, `course`.`name` FROM `course` 
INNER JOIN `course_flags` 
ON `course` .`id` = `course_flags`.`course_id` 
WHERE (`course_flags`.`flags_id` = 1) 

數據庫返回:

+----+-----------------+ 
| id |  name  | 
+----+-----------------+ 
| 1 | JPA Lorem ipsum | 
+----+-----------------+ 

我的兩個條件第二個查詢:(?不好)

SELECT `course`.`id`, `course`.`name` FROM `course` 
INNER JOIN `course_flags` 
ON `course` .`id` = `course_flags`.`course_id` 
WHERE (`course_flags`.`flags_id` = 1 and `course_flags`.`flags_id` = 2) 

數據庫返回:

null 

我希望收到:

+----+-----------------+ 
| id |  name  | 
+----+-----------------+ 
| 1 | JPA Lorem ipsum | 
+----+-----------------+ 

問題如何我懂嗎?

在此先感謝!

回答

1

我懷疑你想要所有提供所有標誌的課程。

您可以通過添加一個或條件標誌的加入則檢查數量做到這一點,你希望:

SELECT `course`.`id`, `course`.`name` FROM `course` 
INNER JOIN `course_flags` 
    ON `course` .`id` = `course_flags`.`course_id` 
    AND (`course_flags`.`flags_id` = 1 OR `course_flags`.`flags_id` = 2) 
WHERE 
GROUP BY (course.id) 
HAVING COUNT(DISTINCT course_flags.id) = 2; 
+0

沒錯!非常感謝你! – Piotr

+0

@Piotr沒問題,很樂意幫忙。 – Jim

2
SELECT c.id, c.name 
FROM course AS c 
INNER JOIN course_flags AS cf 
ON c.id = cf.course_id 
WHERE cf.flags_id = 1 
    OR cf.flags_id = 2