![]() |
Re: [SQL] Verknüpfungs Problem
Und auf die 3 Tabellen:
SQL-Code:
Die Tabellen habe ich mal nicht mit Tabelle1-3 bezeichnet, da so die Verknüpfungen leichter ersichtlich werden.
SELECT * FROM devices d, actions a, deviceactions da
WHERE d.deviceid=da.deviceid AND a.actionid=da.actionid AND (a.action='bohren' OR a.action='schrauben') Greetz alcaeus |
Re: [SQL] Verknüpfungs Problem
Zitat:
Ich wüsste jetzt nicht wie er, jedenfalls bei MySQL, ohne mehrfaches Einbinden der Tabelle "EINSATZGEBIETE" auskommt. Tschüss, Lutz |
Re: [SQL] Verknüpfungs Problem
Vielen Dank erstmal für Eure Beiträge. :hi:
Vielleicht gibt es ja auch einen ganz anderen Ansatz für die Problemstellung. In Worten formuliert: Es gibt eine variable Menge von Geräten und eine variable Menge von Eigenschaften. Die Eigenschaften "hart" einzucoden macht keinen Sinn, da mit einem neuen Gerät auch neue Eigenschaften auftauchen können (um beim Beispiel zu bleiben: neues Gerät -> Hobel, neue Eigenschaft -> hobeln). In der Suchmaske soll über die Eigenschaften die passenden Geräte selektiert werden. (z.B. ich suche ein Gerät, welches sägen UND fräsen UND hobeln kann - also NICHT: sägen ODER fräsen ODER hobeln). Ich finde einfach keinen Ansatz :wall: [edit]@lume96: Nach Deinem Vorschlag müsste ich also bei 4 selektierten Eigenschaften die selbe Tabelle 4x einbinden?[/edit] |
Re: [SQL] Verknüpfungs Problem
Moin,
Zitat:
Zitat:
Zitat:
Wenn Du die Tabelle mit den Einsatzgebieten nur einmal einbeziehst, dann stösst Du unweigerlich auf das Problem das Du zwei (oder mehrere) Konditionen für den gleichen Record setzt (xx='bohren' AND xx='schrauben'). Das kann in einem und dem selben record natürlich nie zu einem positiven Ergebniss führen. Eine andere Möglichkeit wäre unter Umständen ein INTERSECT (falls MySQL das unterstützt). In diesem Falle stellt Du eine eigene Query für jeden Einsatzbereich her und verknüpfst die einzelnen Queries mit INTERSECT. Das gibt Dir dann die Schnittmenge, also nur die Ergebnisse, die in allen Queries vorkommen. Das Ganze könnte dann so aussehen :
SQL-Code:
(Nicht geprüft)
/* Alle Produkte die 'schlagen' */
SELECT p.name FROM tabelle1 p, tabelle2 t WHERE p.id = t.pid AND t.name = 'schlagen' INTERSECT /*Schnittmenge aus den beiden Queries*/ /* Alle Produkte die 'bohren' */ SELECT p.name FROM tabelle1 p, tabelle2 t WHERE p.id = t.pid AND t.name = 'bohren' INTERSECT blah blah blah ... Einfacher, bzw. kürzer wird die Query davon aber auch nicht und von der Performance her wird's auch nicht schneller (eher das Gegenteil). Einziger Vorteil ist, dass sich die Query in Delphi vielleicht etwas leichter erstellen lässt, da die Basis ziehmlich fest ist. Tschüss, Lutz |
Re: [SQL] Verknüpfungs Problem
Zitat:
Das INTERSECT scheidet aus, da es leider noch nicht in MySQL (jedenfalls 4.x) nicht implementiert ist. Aber vielen Dank für Deine Hinweise, jetzt muss ich halt mal in den sauren Apfel beissen :wink: |
Re: [SQL] Verknüpfungs Problem - gelöst!
Juhu, ich habe doch noch eine Möglichkeit gefunden! :hello:
Für alle, die mal ein ähnliches Problem haben sollten :
Code:
:witch:
Tabelle 1:
id|name | --+----------+ 1 |Bohrer | 2 |Hammer | Tabelle 2: pid|name | ---+----------+ 1 |schlagen | 1 |schrauben | 2 |schlagen | 1 |bohren | SELECT pid, COUNT( pid ) AS anz FROM Tabelle2 WHERE name IN ( 'bohren', 'schrauben' ) GROUP BY pid HAVING anz = 2 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:31 Uhr. |
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-2025 by Thomas Breitkreuz