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, 4074 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
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Datenbanken
gelöst SQL-Abfrage - DISTINCT - letztes Datum (3)

Frage von emeriks zum Thema Datenbanken ...

Datenbanken
SUM oder AVG in SQL Abfrage dauert viel zu lange warum? (5)

Frage von samet22 zum Thema Datenbanken ...

Datenbanken
gelöst SQL-Abfrage mit MAX() (9)

Frage von FrAmEr zum Thema Datenbanken ...

Datenbanken
gelöst Schleifen in SQL-Abfrage bei 2 Tabellen (2)

Frage von Aximand zum Thema Datenbanken ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (20)

Frage von Xaero1982 zum Thema Microsoft ...

Outlook & Mail
gelöst Outlook 2010 findet ost datei nicht (19)

Frage von Floh21 zum Thema Outlook & Mail ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...