2017-09-24 2 views
0

Ich habe die SQL-Abfrage:Kombination von zwei SQL-Abfragen in Anweisung

SELECT DISTINCT project_id 
FROM projects 
WHERE (meta_key = "Project Name" AND meta_value LIKE '%t%') 

Das gibt

project_id 
251 
299 
302 
319 
317 
307 
310 
312 
371 
364 
365 
366 
368 

Ich habe eine andere Abfrage:

SELECT DISTINCT project_id 
FROM tags 
WHERE (tag LIKE '%t%') 

Das gibt:

project_id 
251 

Ich versuche, die beiden Aussagen mit einer IN Anweisung zu kombinieren, um dort Kreuzung zu bekommen.

SELECT DISTINCT project_id 
FROM projects 
WHERE (meta_key = "Project Name" AND meta_value LIKE '%t%') 
IN (SELECT DISTINCT project_id 
    FROM tags 
    WHERE (tag LIKE '%t%')) 

Allerdings bekomme ich nichts für das Ergebnis.

project_id 

ich glaube, ich

project_id 
251 

Am bekommen sollte ich richtig hier die IN Anweisung? Wenn nicht, welches Werkzeug sollte ich verwenden, um diese Aufgabe zu erfüllen. Vielen Dank.

+0

Siehe https://stackoverflow.com/questions/31397313/trying-to-perform-minus-operation-in-mysql – Slkrasnodar

Antwort

2

Ordnen Sie einfach project_id dem IN Klauselausdruck zu. Derzeit IN() wertet die boolesche Logik der anderen WHERE Bedingung und False oder True wird nie gleich einer dreistelligen Ganzzahl sein.

... 
WHERE (meta_key = 'Project Name' AND meta_value LIKE '%t%') 
AND project_id IN (SELECT DISTINCT project_id 
        FROM tags 
        WHERE (tag LIKE '%t%')) 
+0

Vielen Dank für die Antwort dies funktioniert. Ich habe Probleme zu verstehen, warum das funktioniert. Haben Sie ein Beispiel dafür, wie IN in diesem Fall funktioniert? – jackana3

+1

'SELECT DISTINCT' ist nicht notwendig mit' IN'. –

+0

Ok, das ist hilfreich danke – jackana3