2x NOT IN VERBINDEN

querytail

Erfahrenes Mitglied
Hallo zusammen,

ich möchte, dass eine Ausgabe nur dann erfolgt, wenn artid oder usid in einer der Spalten nicht vorkommt:

PHP:
select order.* from order
                        where order.orderid = $rid
			and artid NOT IN (select objectid from review) 
                       and usid NOT IN (select us from review) 
                        order by order.artid

Leider funktioniert das so nicht, sodass ich mal wieder auf Hilfe angewiesen bin.

Danke im Voraus.

Grüße

Michael Meyer
 
Zuletzt bearbeitet:
Ich versteh dich noch nicht so ganz.

Gibt es die Spalten artid und usid und jeder Wert soll in jeweils einer anderen Spalte nicht vorkommen oder soll keiner dieser Werte in einer anderen Spalte vorkommen oder wie?
 
Hallo,

ja, usid und artid sind beides Spalten aus review.
Wenn artid und usid beide vorkommen, soll keine Ausgabe erfolgen. Bei allem anderen soll die Ausgabe erfolgen.

Ich habe den Text oben noch ein wenig geändert.
 
Hi.

Was denn nun?
ich möchte, dass eine Ausgabe nur dann erfolgt, wenn artid oder usid in einer der Spalten nicht vorkommt
SQL:
where order.orderid = $rid
  and ( artid NOT IN (select objectid from review) 
            OR
            usid NOT IN (select us from review))
Das ist etwas ganz anderes:
querytail hat gesagt.:
Wenn artid und usid beide vorkommen, soll keine Ausgabe erfolgen. Bei allem anderen soll die Ausgabe erfolgen.
SQL:
where order.orderid = $rid
  and not ( artid IN (select objectid from review) 
            and
            usid IN (select us from review))
Gruß
 
Unterabfrage dieser Art können sehr performance-bremsend sein

SQL:
SELECT
	order.*
FROM
	order
	LEFT JOIN review AS r1
		ON order.artis = r1.objectid
	LEFT JOIN review AS r2
		ON order.usis = r2.us
WHERE
	order.orderid = {$rid}
	AND NOT (r1.objectid IS NULL OR r2.us IS NULL)
ORDER BY order.artid
 
Zuletzt bearbeitet von einem Moderator:
Puh, @Yaslaw: Das bekomme ich derzeit nicht hin, weil usid (usis) nicht in order liegt, sondern ich dafür noch ein Subselect benötige.

@deepthroat: Der 2. Code funktioniert.

Vielen Dank an Alle.


Edit: Jetzt habe ich das doch geschafft. Leider zeigt er mir genau das umgekehrte, nämlich nur die, wo beide Werte vorkommen.

SQL:
SELECT
    ORDER.*
FROM
    ORDER
    LEFT JOIN review AS r1
        ON ORDER.artis = r1.objectid
    LEFT JOIN review AS r2
        ON (SELECT USID FROM USER WHERE ID = $id) = r2.us
WHERE
    ORDER.orderid = {$rid}
    AND NOT (r1.objectid IS NULL OR r2.us IS NULL)
ORDER BY ORDER.artid
 
Zuletzt bearbeitet von einem Moderator:
Zurück