문제

다음 방식으로 쿼리를 생성하는 스크립트가 있습니다 (사용자 입력 기반).

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
    
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top