하위 선택이있는 여러 테이블에서 행을 뒤로 당기시겠습니까?
-
05-07-2019 - |
문제
다음 방식으로 쿼리를 생성하는 스크립트가 있습니다 (사용자 입력 기반).
SELECT * FROM articles
WHERE (articles.skeywords_auto ilike '%pm2%')
AND spubid IN (
SELECT people.spubid FROM people
WHERE (people.slast ilike 'chow')
GROUP BY people.spubid)
LIMIT 1;
결과 데이터 세트 :
Array ( [0] =>
Array (
[spubid] => A00603
[bactive] => t
[bbatch_import] => t
[bincomplete] => t
[scitation_vis] => I,X
[dentered] => 2009-07-24 17:07:27.241975
[sentered_by] => pubs_batchadd.php
[drev] => 2009-07-24 17:07:27.241975
[srev_by] => pubs_batchadd.php
[bpeer_reviewed] => t
[sarticle] => Errata: PM2.5 and PM10 concentrations from the Qalabotjha low-smoke fuels macro-scale experiment in South Africa (vol 69, pg 1, 2001)
[spublication] => Environmental Monitoring and Assessment
[ipublisher] =>
[svolume] => 71
[sissue] =>
[spage_start] => 207
[spage_end] => 210
[bon_cover] => f
[scover_location] =>
[scover_vis] => I,X
[sabstract] =>
[sabstract_vis] => I,X
[sarticle_url] =>
[sdoi] =>
[sfile_location] =>
[sfile_name] =>
[sfile_vis] => I
[sscience_codes] =>
[skeywords_manual] =>
[skeywords_auto] => 1,5,69,2001,africa,assessment,concentrations,environmental,errata,experiment,fuels,low-smoke,macro-scale,monitoring,pg,pm10,pm2,qalabotjha,south,vol
[saward_number] =>
[snotes] =>
)
문제는 데이터 세트의 일부로 다시 돌아 오려면 '사람'테이블 (서브 선택에서 참조)의 모든 열이 필요하다는 것입니다. 나는 과거에 Sub Select에서 많은 일을하지 않았 으므로이 접근법은 나에게 매우 새롭습니다. 인민 테이블의 행/열뿐만 아니라 기사 테이블에서 일치하는 행/열을 어떻게 뒤로 당기려면 어떻게해야합니까?
해결책
당신은 조인에 익숙합니까? ANSI 구문 사용 :
SELECT DISTINCT *
FROM ARTICLES t
JOIN PEOPLE p ON p.spubid = t.spudid AND p.slast ILIKE 'chow'
WHERE t.skeywords_auto ILIKE'%pm2%'
LIMIT 1;
두 테이블에서 반환 된 모든 열에 대해 그룹을 정의하는 데있어 뚜렷한 저장이 있습니다. 나는 당신이 당신의 하위 퀘스트에 그룹을 가지고 있었기 때문에 그것을 포함 시켰습니다. 실제로 필요한지 모르겠습니다.
다른 팁
이 경우 하위 선택 대신 조인을 사용할 수 없습니까?
SELECT a.*, p.*
FROM articles as a
INNER JOIN people as p ON a.spubid = p.spubid
WHERE a.skeywords_auto ilike '%pm2%'
AND p.slast ilike 'chow'
LIMIT 1;
처음부터 시작하겠습니다
- 그룹이 필요하지 않아야합니다. 대신 뚜렷한 것을 사용하십시오 (내부 쿼리에서 집계하지 않습니다).
내부 테이블의 내용을 보려면 실제로 합류해야합니다. 내용은 섹션에서 표시되지 않으면 노출되지 않습니다. People 테이블에서 기사 테이블로 왼쪽 외부 조인은 쿼리와 동일해야합니다.
SELECT * FROM people LEFT OUTER JOIN articles ON articles.spubid = people.spubid WHERE people.slast ilike 'chow' AND articles.skeywords_auto ilike '%pm2%' LIMIT 1
제휴하지 않습니다 StackOverflow