본문 바로가기
MySql

MySQL 조인 된 테이블이있는 행 수 선택

by 베이스 공부 2021. 1. 9.
반응형

일대 다 관계를 가진 두 개의 테이블이 있습니다. 나는 ID 열로 테이블을 결합합니다. 내 문제는 두 번째 (tablekey_id) 테이블에서 일치하는 모든 항목의 개수가 필요하지만 부울 is_basedomain 으로 표시된 행의 정보가 필요하다는 것입니다. 참고로 동일한 tablekey_id를 가진 행 집합 당 is_basedomain = 1 인 행이 하나만 있습니다.

표 : tablekey

id  linkdata_id  timestamp
22  9495028175   2013-03-10 01:13:46
23  8392740179   2013-03-10 21:23:25

표 : searched_domains.

참고 : tablekey_id는 tablekey 테이블의 id에 대한 외래 키입니다.

id  tablekey_id  domain        is_basedomain
1   22           somesite.com  1
2   22           yahoo.com     0
3   23           red.com       1
4   23           blue.com      0
5   23           green.com     0

여기에 Im working with 쿼리가 있습니다. 하위 쿼리를 사용하려고했지만 현재 tablekey_id에 대한 개수 만 선택할 수 없으므로 작동하지 않습니다.

SELECT `tablekey_id`, `linkdata_id`, `timestamp`, `domain`, `is_basedomain`,
   (SELECT COUNT(1) AS other FROM `searched_domains` AS dd 
    ON dd.tablekey_id = d.tablekey_id GROUP BY `tablekey_id`) AS count
FROM `tablekey` AS k 
JOIN `searched_domains` AS d
ON k.id = d.tablekey_id 
WHERE `is_basedomain` = 1 GROUP BY `tablekey_id`

내가 되돌리고 싶은 결과는 다음과 같습니다.

tablekey_id  linkdata_id  timestamp            domain        is_basedomain    count
22           9495028175   2013-03-10 01:13:46  somesite.com  1                2
23           8392740179   2013-03-10 21:23:25  red.com       1                3

아무도 이것을 하나의 쿼리로 가져올 수 있습니까?

 

해결 방법

 

is_basedomain = 1 인 searched_domains 행을 쿼리에서 별도의 테이블로 처리하고 searched_domains의 다른 인스턴스와 조인하여 개수를 가져올 수 있습니다.

SELECT 
    d.tablekey_id, 
    k.linkdata_id, 
    k.timestamp,  
    d.domain, 
    d.is_basedomain, 
    COUNT(*) as 'count'
FROM 
    tablekey AS k
      join searched_domains AS d on d.tablekey_id=k.id
      join searched_domains AS d2 on d2.tablekey_id=d.tablekey_id
WHERE 
    d.is_basedomain = 1 
GROUP BY 
    d.tablekey_id, 
    k.linkdata_id, 
    k.timestamp,  
    d.domain, 
    d.is_basedomain

 

참조 페이지 https://stackoverflow.com/questions/15338079

 

 

반응형

댓글