Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   SQL WHERE über mehrere Einträge (https://www.delphipraxis.net/153461-sql-where-ueber-mehrere-eintraege.html)

omata 4. Aug 2010 22:47

AW: SQL WHERE über mehrere Einträge
 
SQL-Code:
SELECT * 
FROM posts p
WHERE EXISTS (SELECT *
                FROM post_topics
                WHERE post_id = p.post_id
                  AND topic_id = 1)
  AND EXISTS (SELECT *
                FROM post_topics
                WHERE post_id = p.post_id
                  AND topic_id = 4)

jfheins 4. Aug 2010 23:41

AW: SQL WHERE über mehrere Einträge
 
Ein join der Tabelle mit sich selbst?
SQL-Code:
select
*
from
Post_Topics as a,
Post_Topics as b
where
a.topicid=1
and
b.topicid=4
and
a.postid=b.postid

mkinzler 5. Aug 2010 06:23

AW: SQL WHERE über mehrere Einträge
 
Da bekommst du eine wilde Kombination von Einträgen, welche nichts miteinander zu tun haben

jfheins 5. Aug 2010 10:03

AW: SQL WHERE über mehrere Einträge
 
Okay, nochmal "Selfjoin" nachgelesen, korrigierte Fassung:
Code:
select post_id from
Post_Topics as a
join Post_Topics as b on post_id
where a.topic_id = 1 and b.topic_id = 4

generic 5. Aug 2010 11:33

AW: SQL WHERE über mehrere Einträge
 
Ohne joins
SQL-Code:
select
    post_id
from
    post_topics
where
    Topics_id in (1,4)
group by
    post_id
having
    count(*)=2
man müsste mal schauen was schnell läuft auf deinen db system.

igel457 5. Aug 2010 13:16

AW: SQL WHERE über mehrere Einträge
 
Hallo,

die Lösung von Generic gefällt mir sehr gut, da sie eigentlich genau dem entspricht, was ich vorher mit meinem PHP Skript gemacht habe: Alle Topic_IDs als Array in ein Array mit Post_Id als Schlüssel einzutragen und dann die Anzahl der Elemente zu zählen.

Vielen Dank für die Lösungen,
Andreas

HeZa 5. Aug 2010 13:58

AW: SQL WHERE über mehrere Einträge
 
Nur der Vollständigkeit halber:

Die Lösung von omata, jfheins (beide) und mir funktionieren auch, allerdings hat die Lösung von generic (unter Oracle 11G) den besseren Ausführungsplan. Die Lösung von generic funktioniert allerding nur sollange es in post_topics keine doppelten Kombination von post_id und topic_id gibt.

generic 5. Aug 2010 14:00

AW: SQL WHERE über mehrere Einträge
 
in dem Fall kannst du die Menge erst einmal mit distinct in einen inneren Select platt machen, um dann das having auszuführen.

Join in MYSQL sind übrigens immer doof. MYSQL neigt dazu ständig temp.Tabellen anzulegen. -> langsam


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:32 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz