我正在努力解决这个问题,这可能很简单,但我无法让它发挥作用。使用PHP / MYSQLI我尝试从两个表中获取数据,而第一个表将具有获得所有内容的基础,第二个表可能有也可能没有与第一个表匹配的数据表的数据,所以我需要第二个表来返回空值。例如......
First Table' Cust ':
CustomerID Name School
------------------------------------------
1623 Bob Smith BON
1785 Betty Davis FOOT
1854 John Miller BECK
1547 Kate Lake BON
第二个表' Ybk ':
CustomerID Frame Type
------------------------------------------
1623 001 CC
1854 012 CC
我想从这两个表中获得的内容在两件事之间有点变化......
1)如果我想从第一张表中选择学校(例如WHERE Cust.School =' BON')我想得到这个结果:
CustomerID Name School Frame Type
---------------------------------------------------------
1623 Bob Smith BON 001 CC
1547 Kate Lake BON
2)或者,如果我选择了所有内容,我会得到这个结果:
CustomerID Name School Frame Type
---------------------------------------------------------
1623 Bob Smith BON 001 CC
1785 Betty Davis FOOT
1854 John Miller BECK 012 CC
1547 Kate Lake BON
现在,当我尝试一些不同版本的SELECT语句时,我只返回两个表中的结果,而不是所有的Cust字段返回Ybk,如果它们也存在的话。救命!谢谢!
答案 0 :(得分:2)
这是一个相当简单的LEFT JOIN:
SELECT * FROM Cust LEFT JOIN YbK using (CustID) where School='BON';
# CustID, Name, School, Frame, Type
'1547', 'Kate Lake', 'BON', NULL, NULL
'1623', 'Bob Smith', 'BON', '001', 'CC'
和
SELECT * FROM Cust LEFT JOIN YbK using (CustID);
# CustID, Name, School, Frame, Type
'1547', 'Kate Lake', 'BON', NULL, NULL
'1623', 'Bob Smith', 'BON', '001', 'CC'
'1785', 'Betty Davis', 'FOOT', NULL, NULL
'1854', 'John Miller', 'BECK', '012', 'CC'
LEFT JOIN将返回JOIN中第一个表中的所有行,并在第二个表中没有匹配行的任何缺失列中填充null。这些行在USING
子句中的列上匹配,这有助于在结果输出中合并匹配的列。
完整的合成器在MySQL手册here
中给出