1
다 대 다 관계가있는 세 개의 MySQL 테이블이 있습니다.다 대다 관계에서 단 하나의 참조로 행 가져 오기
하나의 테이블은 작업을위한 것이고 다른 하나는 사용자를위한 것이고 세 번째는 작업을 사용자에게 할당하는 것입니다 (각 작업은 여러 사용자에게 할당 될 수 있습니다).
users: tasks: assigned:
+----+------+ +----+-------+ +---------+---------+
| id | name | | id | title | | task_id | user_id |
+----+------+ +----+-------+ +---------+---------+
| 1 | John | | 1 | One | | 1 | 1 |
+----+------+ +----+-------+ +---------+---------+
| 2 | Mike | | 2 | Two | | 1 | 2 |
+----+------+ +----+-------+ +---------+---------+
| 2 | 1 |
+---------+---------+
한 명의 사용자에게만 작업을 할당하려면 어떻게해야합니까?
하나의 특정 사용자에게만 작업을 할당하려면 어떻게합니까?
다른 테이블 (예 : 각 작업에 대한 메모가 들어있는 테이블)이 연결되면 쿼리가 예상대로 작동하지 않습니다. HAVING 조건이 항상 의도 된대로 작동하려면 다음과 같이 정확한 열에서 COUNT를 계산해야합니다. HAVING COUNT (DISTINCT user_id) = 1 and name = "John" ' –
True이면 동일한 사용자가 할당되지 않습니다. 동일한 작업에 여러 번. 의미 론적으로는별로 의미가 없으며 (task_id, user_id)를 'assigned'테이블에서 고유 한 것으로 선언함으로써 피하는 것이 좋습니다. 물론 '사용자'또는 '작업'테이블에서 ID가 고유하지 않은 경우에도 동일한 문제가 발생할 수 있습니다. – vhu
앞에서 언급했듯이 다른 테이블이 조인되고 열이 선택되면 'COUNT (*)'를 방해하기 때문에 실패합니다. 'assigned '에있는 고유하지 않은 사용자 ID와는 아무런 관련이 없습니다. 물론 사용자의 의견이있는 테이블과 같이 고유하지 않은 사용자 ID가있을 수 있습니다. –