0
두 개의 테이블이 있습니다. blacklisted_device
에있을 수있는 device
입니다. 특정 user_ids
을 포함하고 동일한 요청 번호가 blacklisted_devices
인 기기의 번호를 확인하고 싶습니다. 여기 동일한 쿼리에서 두 개의 링크 테이블을 쿼리하는 방법은 무엇입니까?
전체 SQL
그것을 시도 :CREATE TABLE device (
device_id serial PRIMARY KEY,
user_id integer,
updated_at timestamp default current_timestamp
);
CREATE TABLE blacklisted_device (
blacklisted_id serial PRIMARY KEY,
device_id integer,
updated_at timestamp default current_timestamp,
CONSTRAINT blacklisted_device_device_id_fkey FOREIGN KEY (device_id)
REFERENCES device (device_id) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION
);
INSERT INTO device (user_id)
VALUES (1),(2),(2),(7),(88),(99),(102),(106);
INSERT INTO blacklisted_device (device_id)
VALUES (1),(2),(3),(4);
SELECT COUNT(*) AS total_device
FROM device
WHERE user_id IN (7,88,99);
SELECT COUNT(*) AS blacklisted
FROM blacklisted_device
WHERE device_id IN (SELECT device_id FROM device WHERE user_id IN (7,88,99));
당신은 내가 원하는 결과를 얻을 수 끝에 만 두 요청에서 볼 수 있듯이. 한 번의 요청으로 어떻게받을 수 있습니까?
total_device: 3, blacklisted: 1
모든 SQL에 대한 귀하의 의견을 자유롭게
, 나는 아마 몇 가지 실수를했다. 당신이 제공SELECT COUNT(*) AS total_device,
COUNT(DISTINCT bd.device_id) AS blacklisted
FROM device d
LEFT JOIN blacklisted_device bd
ON d.device_id = bd.device_id
WHERE d.user_id IN (7,88,99);
출력이 잘못 :
감사 –