Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

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, 4090 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
gelöst Hilfe bei SQL-Abfrage (5)

Frage von emeriks zum Thema Datenbanken ...

Datenbanken
gelöst SQL-Abfrage mit "kleiner gleich" funktioniert nicht (2)

Frage von derSESO zum Thema Datenbanken ...

Datenbanken
gelöst SQL Abfrage - Ausgabe von Person mit Privat- und Dienstadresse (3)

Frage von CBruns zum Thema Datenbanken ...

Neue Wissensbeiträge
Drucker und Scanner

Samsung SL-M4025ND, firmware update und (kompatible) Tonerkassetten

(1)

Erfahrungsbericht von markus-1969 zum Thema Drucker und Scanner ...

Router & Routing

PfSense auf Supermicro Intel Xeon D-15x8 SoC Bare Bone

Tipp von Dobby zum Thema Router & Routing ...

Windows Server

Exchange 2010 auf Windows Server 2016 und AD

(2)

Tipp von Herbrich19 zum Thema Windows Server ...

KVM

How to: Libvirt Port forwarding

(2)

Anleitung von fundave3 zum Thema KVM ...

Heiß diskutierte Inhalte
Router & Routing
über Vmware auf eine FritzBox mit IPv6 per VPN (16)

Frage von Zockervogel zum Thema Router & Routing ...

Windows Server
gelöst Netzlaufwerk RemoteApp auf Win 2012 R2 Terminalserver funktioniert nicht (12)

Frage von grenzde zum Thema Windows Server ...

Windows 7
Windows Client Anmeldung bei zwei identischen Domänen (11)

Frage von creeko zum Thema Windows 7 ...