簡體   English   中英

MySQL-使用WHERE子句的內部聯接

[英]MySQL - Inner join with WHERE clause

我在查找有條件的記錄時遇到了問題。 我想找到所有帶有標志的課程。

課程表記錄:

+----+------+-----------------+
| 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 |
+----+-----------------+

問題我如何得到?

提前致謝!

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

我懷疑您希望所有提供所有標志的課程。

您可以通過在聯接中添加一個或條件,然后檢查標志的數量是否符合您的期望來做到這一點:

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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM