Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Problem bei SQL Abfrage (inner join)

Frage Entwicklung Datenbanken

Mitglied: Boingboing

Boingboing (Level 1) - Jetzt verbinden

07.06.2011, aktualisiert 15:04 Uhr, 4111 Aufrufe, 4 Kommentare

Hi, habe ein Problem folgende SQL Abfrage umzubauen

Ich habe folgende Abfrage welche mir 78 Ergebnisse zurückliefert und welche auch ordnungsgemäß arbeitet.

01.
SELECT DISTINCT p.products_fsk18, p.products_shippingtime, p.products_model, p.products_ean, p.products_var1, p.products_var2, pd.products_name, p.products_id, p.products_quantity, p.products_image, p.products_weight, pd.products_short_description, pd.products_description, p.manufacturers_id, p.products_price, p.products_vpe, p.products_vpe_status, p.products_vpe_value, p.products_discount_allowed, p.products_tax_class_id, p.products_wbz, p.products_eta, p.products_nnbestellbar 
02.
FROM products p 
03.
INNER JOIN products_description pd ON p.products_id = pd.products_id 
04.
INNER JOIN products_merkmale m ON p.products_model = m.products_id 
05.
WHERE p.products_status =  '1' 
06.
AND pd.language_id =  '2' 
07.
AND ( 
08.
m.merkmale_code =  'ASIA' 
09.
OR m.merkmale_code =  'FÄCHER' 
10.
11.
ORDER BY p.products_price ASC  
12.
LIMIT 0 , 30
Des weiteren habe ich 3 Tabellen: products, products_merkmale und products_description

Das knifflige dabei ist die products_merkmale (pm)

pm.products_id | pm.merkmal_code | pm.merkmal_description
1 | ASIA | Aus Asien
1 | Bambus | Aus Bambus hergestellt
1 | Fächer | Faltfächer
2 | ASIA | Aus Asien
3 | ASIA | Aus Asien
3 | FÄCHER | Faltfächer
usw....

die obrige Abfrage gibt mir nun alle Artikel wieder, welche FÄCHER oder ASIA als Merkmal in der der Merkmale-Tabelle haben, soweit sogut.
Nun möchte ich aber nur die Artikel welche FÄCHER >>UND << ASIA in der Merkmal-Tabelle haben.

Mit einem einfachen ändern des ORs in AND in Zeile 09 funktionierts nicht, soweit würde mein SQL - Verständnis auch reichen aber leider ist dann dort Schluss und ohne externe Hilfe würde ich nicht auf die Lösung kommen.

Danke für eure Antworten/Hilfestellungen
Mitglied: thaenhusen
07.06.2011 um 15:54 Uhr
Moin.

01.
SELECT DISTINCT p.products_fsk18, p.products_shippingtime, p.products_model, p.products_ean, p.products_var1,  
02.
p.products_var2, pd.products_name, p.products_id, p.products_quantity, p.products_image, p.products_weight,  
03.
pd.products_short_description, pd.products_description, p.manufacturers_id, p.products_price, p.products_vpe,  
04.
p.products_vpe_status, p.products_vpe_value, p.products_discount_allowed, p.products_tax_class_id, p.products_wbz,  
05.
p.products_eta, p.products_nnbestellbar  
06.
FROM products p  
07.
INNER JOIN products_description pd ON p.products_id = pd.products_id  
08.
WHERE p.products_status =  '1'  
09.
AND pd.language_id =  '2'  
10.
AND p.products_model in(select products_id from products_merkmale where merkmale_code = 'ASIA') 
11.
AND p.products_model in(select products_id from products_merkmale where merkmale_code = 'FÄCHER') 
12.
ORDER BY p.products_price ASC   
13.
LIMIT 0 , 30
Wir wäre es mit IN()-Statements oder alternativ mit Having().

Dann solltest Du zu Deinem Ergebnis kommen.

HTH
MK
Bitte warten ..
Mitglied: Boingboing
07.06.2011 um 16:01 Uhr
Dank dir vielmals , klappt wunderbar deine Zeilen, muss sie jetzt nurnoch entsprechend Anpassen

leider zwingt die Abfrage den Server richtig in die Knie vorher 0.0018s nachher 77.132s aber ich werds schon irgendwie hinbekommen ^^
Bitte warten ..
Mitglied: nxclass
07.06.2011 um 23:37 Uhr
.. man könnte auch in der products_merkmale Tabelle nach products_id gruppieren (GROUP) und auf merkmal_code filtern (WHERE .. OR ..) - dann noch ein COUNT einfügen und nun sollte man bei jeder ID mit einem count = 2 sicher sein das es genau die 2 werte enthält.
Bitte warten ..
Mitglied: Boingboing
09.06.2011 um 16:09 Uhr
01.
SELECT DISTINCT p.products_fsk18, p.products_shippingtime, p.products_model, p.products_ean, p.products_var1, 
02.
p.products_var2, pd.products_name, p.products_id, p.products_quantity, p.products_image, p.products_weight, 
03.
pd.products_short_description, pd.products_description, p.manufacturers_id, p.products_price, p.products_vpe, 
04.
p.products_vpe_status, p.products_vpe_value, p.products_discount_allowed, p.products_tax_class_id, p.products_wbz, 
05.
p.products_eta, p.products_nnbestellbar 
06.
FROM products as p 
07.
INNER JOIN products_description pd ON p.products_id = pd.products_id 
08.
INNER JOIN (select products_id, COUNT(merkmale_code) from products_merkmale where merkmale_code = 'ASIA' or merkmale_code = 'FÄCHER' GROUP BY products_id HAVING COUNT(merkmale_code) = 2) as blubb ON p.products_model = blubb.products_id 
09.
WHERE p.products_status =  '1' 
10.
AND pd.language_id =  '2' 
11.
ORDER BY p.products_price ASC
Ergebnisse: 23 - 0.231 sek
Bitte warten ..
Ähnliche Inhalte
Datenbanken
Inner join über 3 Tabellen
Frage von Fitzel69Datenbanken10 Kommentare

Hallo zusammen, ich habe folgendes Problem: Ich muß aus unserem ERP System mehrere Infos heraus ziehen. Hierfür benötige ich ...

Datenbanken
MySQL Abfrage um JOIN erweitern
gelöst Frage von datadexxDatenbanken14 Kommentare

Hallo SQL Experten, ich bräuchte mal wieder eure Hilfe Ich habe folgende Abfrage für eine Statistik welche soweit auch ...

Datenbanken
SQL LEFT JOIN in Spalten
gelöst Frage von StfnCstrDatenbanken5 Kommentare

Hallo, ich sehe mal wieder den Wald vor lauter Bäumen nicht. Ich habe 2 Tabellen Tabelle 1: PK, Vorname, ...

Datenbanken
SQL - JOIN zeigt mehrfaches an
Frage von MiStDatenbanken9 Kommentare

Guten Morgen, ich habe mich frisch mit dem Thema SQL "angefreundet". Jetzt habe ich aber irgendwie ein Problem. Und ...

Neue Wissensbeiträge
Microsoft

Update KB4073578 für AMD CPU (Spectre und Meltdown Lücke)

Information von sabines vor 1 StundeMicrosoft

Wegen Problemen (BOSD, nicht startende PCs) wurde das Update KB4056897 und KB4056894 für AMD CPUs zurückgezogen. Dieses Update KB4073578 ...

Mac OS X

MacOS wo ist die Tilde ?

Tipp von Alchimedes vor 14 StundenMac OS X1 Kommentar

Hallo, ich hab eine MacOS qwertz Keyboard auf US Layout umgestellt da die Sonderzeichen besser erreichbar sind. Leider fehlt ...

Datenschutz

Weitere Informationen zum Sicherheitsproblem BeA

Information von Penny.Cilin vor 21 StundenDatenschutz

Im folgenden ein weiterer Bericht über die Sicherheitsprobleme von Bea. Fataler Konstruktionsfehler im besonderen elektronischen Anwaltspostfach Gruss Penny

Windows 10

Systemdienste behalten nach Win10 inplace-Upgrade nicht die ggf. modifizierte Startart bei

Tipp von DerWoWusste vor 23 StundenWindows 103 Kommentare

Stellt Euch vor, Ihr habt ein Win10 System und modifiziert dort die Startart von Systemdiensten. Zum Beispiel wollt Ihr ...

Heiß diskutierte Inhalte
Netzwerke
NTFS-Berechtigung
Frage von Daoudi1973Netzwerke23 Kommentare

Hallo zusammen und frohes neues Jahr (Sorry, ich bin spät dran) Meine Frage: 1- Ich habe einen Ordner im ...

Batch & Shell
AD-Abfrage in Batchdatei und Ergebnis als Variable verarbeiten
gelöst Frage von Winfried-HHBatch & Shell19 Kommentare

Hallo in die Runde! Ich habe eine Ergänzungsfrage zu einem alten Thread von mir. Ausgangslage ist die Batchdatei, die ...

Windows 10
Netbook erkennt Soundkarte nicht - keinerlei Info zum Hersteller und Modell vom Netbook und Hardware bekannt
Frage von fyrb38Windows 1018 Kommentare

Guten Tag, meine Schwester reist in einigen Wochen für ein paar Monate ins Ausland und hat sich dafür ein ...

Microsoft Office
Deaktivieren von Startbildschirm und Backstage-Ansicht in Office 2016 per Batch-Datei
Anleitung von SarekHLMicrosoft Office17 Kommentare

Guten Morgen zusammen! Ich habe mir gestern (auch mit Hilfe dieses Boards) ein Script gebastelt, um in Office 2016 ...