Mysqli从多个表中获取多个值

时间:2015-07-02 01:03:46

标签: php select mysqli

我正在努力解决这个问题,这可能很简单,但我无法让它发挥作用。使用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,如果它们也存在的话。救命!谢谢!

1 个答案:

答案 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

中给出