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, 4082 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 ..
Neuester Wissensbeitrag
Ähnliche Inhalte
Datenbanken
gelöst Verschachtelte SQL-Abfrage (4)

Frage von User1000 zum Thema Datenbanken ...

Datenbanken
gelöst SQL-Abfrage und leere Felder vermeiden (12)

Frage von zwangseinweisung zum Thema Datenbanken ...

Datenbanken
gelöst SQL-Abfrage - Anzahl der Wechsel zählen (15)

Frage von Cire48 zum Thema Datenbanken ...

Datenbanken
gelöst MySQL Abfrage um JOIN erweitern (14)

Frage von datadexx zum Thema Datenbanken ...

Heiß diskutierte Inhalte
Switche und Hubs
LAG zwischen Cisco SG300 und Dlink DGS1100 herstellen - wie? (18)

Frage von White-Rabbit2 zum Thema Switche und Hubs ...

Linux
gelöst Boot failed: not a bootable disk (10)

Frage von Fleckmen zum Thema Linux ...

Multimedia & Zubehör
gelöst Iphone 6 prob (8)

Frage von jensgebken zum Thema Multimedia & Zubehör ...

Windows 7
gelöst Windows 7 Umzug zum neuen PC (SATA-Problem) (7)

Frage von MaxMoritz6 zum Thema Windows 7 ...