2016-09-22 13 views
8

Ich bin sicher, dass dies eine doppelte Frage in dem Sinne ist, dass die Antwort irgendwo da draußen ist, aber ich konnte die Antwort nach Googeln für 10 Minuten nicht finden, so würde ich an die Redaktion appellieren, nicht zu schließen es auf der Grundlage, dass es für andere Menschen nützlich sein könnte.Postgres: überprüfen, ob Array-Feld Wert enthält?

Ich benutze Postgres 9.5. Dies ist meine Tabelle:

 Column   │   Type   │        Modifiers 
─────────────────────────┼───────────────────────────┼───────────────────────────────────────────────────────────────────────── 
id      │ integer     │ not null default nextval('mytable_id_seq'::regclass) 
pmid     │ character varying(200) │ 
pub_types    │ character varying(2000)[] │ not null 

ich mit „Journal“ alle Zeilen finden will in pub_types.

Ich habe die Dokumente gefunden und gegoogelt und das ist, was ich versucht habe:

select * from mytable where ("Journal") IN pub_types; 
select * from mytable where "Journal" IN pub_types; 
select * from mytable where pub_types=ANY("Journal"); 
select * from mytable where pub_types IN ("Journal"); 
select * from mytable where where pub_types contains "Journal"; 

ich the postgres array docs gescannt habe, aber nicht sehen kann ein einfaches Beispiel dafür, wie eine Abfrage auszuführen, und Stackoverflow Fragen scheinen alle auf komplizierteren Beispielen zu beruhen.

Antwort

13

sollte diese Arbeit:

select * from mytable where 'Journal'=ANY(pub_types); 

d.h. die Syntax ist <value> = ANY (<array>). Beachten Sie auch, dass String-Literale in postresql mit einfachen Anführungszeichen geschrieben werden.

+0

Vielen Dank! – Richard

Verwandte Themen