Ehi ragazzi mi sto grattando la testa per questo, spero che qualcuno possa spiegarlo per me. Onestamente ho un po 'paura che mi morda il culo più tardi ...MYSQL JOIN fornisce risultati inaspettati (ma piacevoli)?
Quindi, ho tre tavoli che sto tirando da attualmente. reports
, berries
e melons
. Ho impostato la mia domanda in questo modo e mi fa esattamente ciò che voglio.
SELECT
rpt.*,
ber.shipper, ber.po, ber.commodity, ber.label
FROM reports rpt
LEFT JOIN berries ber ON rpt.inspection_number = ber.report_key
LEFT JOIN melons mel ON rpt.inspection_number = mel.report_key
WHERE rpt.status='1' OR rpt.status='0'
ORDER BY rpt.inspection_number DESC
io ricevo la mia rendimento atteso, che è
key | role | region | inspection_type | inspection_number | shipper | po | commodity | label
3 | NULL | Seattle | melons | 5555 | Shipper1 | PO2 | Commodity2 | Label2
2 | NULL | Seattle | berries | 1023 | Shipper1 | PO1 | Commodity1 | Label1
Se però rimuovo LEFT JOIN melons mel ON rpt.inspection_number = mel.report_key
dalla mia dichiarazione ho la stessa cosa .... non ho mai menzionato melons
??
Se io rivedere e uso JOIN
invece per le bacche
SELECT
rpt.*,
ber.shipper, ber.po, ber.commodity, ber.label
FROM reports rpt
JOIN berries ber ON rpt.inspection_number = ber.report_key
WHERE rpt.status='1' OR rpt.status='0'
ORDER BY rpt.inspection_number DESC
produce quello che mi aspettavo dovrebbe!
key | role | region | inspection_type | inspection_number | shipper | po | commodity | label
2 | NULL | Seattle | berries | 1023 | Shipper1 | PO1 | Commodity1 | Label1
Ma cercando di rivedere la mia dichiarazione di SQL in questo modo ....
SELECT
rpt.*,
ber.shipper, ber.po, ber.commodity, ber.label
mel.shipper, mel.po, mel.commodity, mel.label
FROM reports rpt
JOIN berries ber ON rpt.inspection_number = ber.report_key
JOIN melons mel ON rpt.inspection_number = mel.report_key
WHERE rpt.status='1' OR rpt.status='0'
ORDER BY rpt.inspection_number DESC
Nets me ....
MySQL returned an empty result set (i.e. zero rows). (Query took 0.0011 sec)
mi dà la grande dito medio. Che diavolo? Qualcuno può spiegare che cosa sono evidentemente sbagliato e come risolverlo?
Avrebbe senso avere invece bacche e meloni nello stesso tavolo? –
Vorrei poterlo fare, ma in realtà abbiamo circa 12 tipi di frutta, che hanno tutti i loro campi separati. Cercare di fonderli e ricorrere a loro sarebbe un incubo .... Buona domanda però! – ehime
Credo che otterrete gli stessi risultati con e senza il 'LEFT JOIN' a' mel', ma non credo ai vostri risultati. Le colonne 'shipper',' po' e altre 'ber' sarebbero NULL per ogni riga di melone. –