테이블의 열 이름이 동일한 레코드에 대해 여러 테이블을 쿼리하는 방법
나는 두 개의 테이블, 스위치와 라우터가 있는 데이터베이스를 가지고 있습니다.두 테이블의 열 이름(dev_name, dev_ip 등)은 동일합니다.
저는 두 테이블 모두를 조회하고 특정 호스트 이름을 가진 개별 레코드를 찾는 방법을 알아야 합니다.따라서 PHP 양식이 장치 이름별로 데이터베이스를 쿼리하는 경우 전체 데이터베이스(모든 테이블)를 쿼리하고 장치가 쿼리되는 테이블/행을 찾고 싶습니다.
저는 다음과 같은 질문을 시도했습니다.
SELECT * FROM switches,routers
WHERE switches.dev_name = 'coreswitch01' OR routers.dev_name = 'core01switch';
그러나 라우터 테이블과 코어 스위치 01의 모든 라우터를 반복적으로 포함하는 연결된 출력을 제공합니다.
SELECT * FROM switches,routers
WHERE switches.dev_name = 'coreswitch01' OR routers.dev_name = 'core01switch';
제가 구조화하고자 하는 것은 두 테이블을 모두 읽고 코어스위치01에 대한 레코드를 찾아 어떤 테이블에서 찾든 하나의 레코드만 보여주는 쿼리입니다.
당신은 사용할 수 있습니다.union all
set 연산자:
SELECT *
FROM (SELECT * FROM switches
UNION ALL
SELECT * FROM routers) t
WHERE dev_name = 'coreswitch01'
열이 동일하거나 거의 동일한 두 테이블을 볼 때마다 "왜 이 두 테이블은 하나의 테이블로 결합되지 않습니까?"라고 묻습니다.라우터 대 스위치의 종류를 설명하려면 추가 열이 필요할 수 있지만, 이는 약간의 오버헤드입니다.
하지만 두 개의 테이블이 있다는 것을 감안하면...
특정 쿼리의 경우 이 방법이 최적입니다.
( SELECT * FROM switches WHERE dev_name = 'coreswitch01' )
UNION ALL
( SELECT * FROM routers WHERE dev_name = 'coreswitch01' )
이것은 당신이 다음에 대한 색인을 가지고 있다고 가정합니다.dev_name
각 테이블에
데이터 테이블 원점을 확인하려면 "origin"과 같은 새 필드를 작성할 수 있습니다.
SELECT *
FROM (SELECT 'switches' as origin, * FROM switches
UNION ALL
SELECT 'routers' as origin, * FROM routers) t
WHERE dev_name = 'coreswitch01'
언급URL : https://stackoverflow.com/questions/56742335/how-to-query-multiple-tables-for-a-record-where-tables-have-identical-column-nam
'programing' 카테고리의 다른 글
어떻게 하면 매트플롯립 플롯의 출력을 SVG로 얻을 수 있습니까? (0) | 2023.08.05 |
---|---|
목록 사이의 공백을 설정하는 방법Android에서 항목 보기 (0) | 2023.08.05 |
UIColor를 Swift로 변환하는 방법UI의 색 (0) | 2023.08.05 |
Swift에서 iPhone의 화면 너비를 가져오는 방법UI? (0) | 2023.07.31 |
HTML에서 구성 요소의 선택 도구 태그 제거/바꾸기 (0) | 2023.07.31 |