Frage

Ich habe ein Skript, das auf folgende Weise Abfragen generiert (basierend auf Benutzereingaben):

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;

Der resultierende Datensatz:

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] => 

)

Das Problem ist, dass ich auch alle Spalten aus der Tabelle "People" (wie in der Sub -Select verwiesen) als Teil des Datensatzes zurückkehren muss. Ich habe (offensichtlich) in der Vergangenheit nicht viel mit Sub -Auswahl gemacht, daher ist dieser Ansatz für mich sehr neu. Wie ziehe ich alle passenden Zeilen/Spalten aus der Artikeltabelle sowie die Zeilen/Spalte aus der People -Tabelle zurück?

War es hilfreich?

Lösung

Kennen Sie mit Joins? Verwenden der ANSI -Syntax:

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;

Die unterschiedlichen Paraden durch die Definition einer Gruppe nach jeder Spalte, die aus beiden Tabellen zurückgegeben wurde. Ich habe es eingeschlossen, weil Sie die Gruppe auf Ihrer Unterabfrage hatten. Ich weiß nicht, ob es tatsächlich notwendig war.

Andere Tipps

Könnten Sie in diesem Fall keinen Join anstelle eines Sub-Selekten verwenden?

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;

Fangen wir von vorne an

  • Sie sollten keine Gruppe benötigen. Verwenden Sie stattdessen unterschiedliche (Sie machen keine Aggregation in der inneren Abfrage).
  • Um den Inhalt des inneren Tisches zu sehen, müssen Sie sich tatsächlich anschließen. Der Inhalt ist nur freigelegt, wenn er im Abschnitt aus dem Abschnitt angezeigt wird. Eine linke äußere Verbindung von der People -Tabelle zur Artikeltabelle sollte einer In -In -Abfrage entsprechen:

    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
    
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top