2017-02-03 3 views
3

Angenommen, ich habe 2 TabellenMySQL Inner Join mit null Spalten

Table a 
brand Fruit   edible color size 
farmers banana  yes  yellow null 
fresh banana  yes  red  10 
bounty banana  null  green 2 
farmers apple   yes  red  5 
organic grapes  null  violet 5 
love  strawberry yes  null 5 
flow  lavander  no  null null 

Table b 
boxId fruit  edible color size 
10100 banana  yes  yellow 9 
19299 banana  yes  red  10 
10992 apple  yes  red  5 
10299 grapes  yes  red  5 
01929 lavander no  violet 3 

ist es möglich, Tabelle a und b auch mit der Regel zu verbinden, die: wenn es Nullwerte sind, weiterhin die verbleibenden Spalten Auswertung durch das Auslassen Nullspalte

select a.brand, b.boxId from a prod 
inner join b box on a.fruit = b.fruit 
where a.edible = b.edible and 
a.color = b.color and 
a.size = b.size 

brand  boxID 
farmers  10100 
fresh  19299 
. . . 
+0

Was meinen Sie null? alle Felder, wenn nur ein Null- oder ein spezifisches Feld vorhanden ist? –

+0

alle Felder gibt es eine Null – Led

+1

Sicher ist das, was eine LINKE [OUTER] JOIN ist für – Strawberry

Antwort

2

Ja wie diese

select a.brand, b.boxId 
from a prod 
inner join b box on a.fruit = b.fruit 
where (a.edible = b.edible OR a.edible IS NULL OR b.edible IS NULL) and 
     (a.color = b.color OR a.color IS NULL OR b.color IS NULL) and 
     (a.size = b.size OR a.size IS NULL OR b.size IS NULL) 
+0

ohh cool, es auszuprobieren. – Led

2

Try this:

select a.brand,b.boxId from 
(select a.brand,a.Fruit,a.edible,a.color,a.size from prod) as a 
inner join 
(select * from box) as b 
on a.fruit = b.fruit 
where a.color is not null and a.edible is not null and a.size is not null 
and b.color is not null and b.edible is not null and b.size is not null 
+0

Es werden alle nicht null angezeigt, die Sie ändern können, ist null, wenn Sie alle Nullwerte zwischen zwei Tabellen haben möchten. –

+0

danke, aber ich habe JaydipJ akzeptiert, weil er zuerst – Led

+0

gepostet hat, es ist in Ordnung, danke auch für die Anerkennung der Antwort. –