此join语句如何生成此结果

时间:2012-07-09 12:28:33

标签: php mysql sql join

嗨,我正在学习MySQL加入。从一个教程我有两张桌子。

enter image description here

查询

<?php
// Make a MySQL Connection
// Construct our join query
$query = "SELECT family.Position, food.Meal ".
 "FROM family, food ".
    "WHERE family.Position = food.Position";

$result = mysql_query($query) or die(mysql_error());


// Print out the contents of each row into a table 
while($row = mysql_fetch_array($result)){
    echo $row['Position']. " - ". $row['Meal'];
    echo "<br />";
}
?>

,结果是

enter image description here

*我的问题是,这个选择逻辑是什么。 *如果你开始获得family表位并在食物表中搜索,我认为结果应该是

Dad|steak
Dad|Tacos
Mom|Salad

但结果不同。搜索的工作原理和结果集的组织方式。请帮助我了解这是如何工作的,提前谢谢...............

1 个答案:

答案 0 :(得分:0)

我会重写这个查询:

SELECT
   family.Position, food.Meal
FROM
   family
   JOIN food USING (Position)

您可以对WHERE条件使用JOIN子句 - MySQL会以任一方式优化它,但通常使用ON / USING JOIN的语法条件是首选。你也可以在这里使用NATURAL JOIN,但这可能不安全。

至于你的具体问题,我不知道为什么MySQL以这种或那种方式命令。我唯一可以告诉你的是,如果你没有指定ORDER BY子句,你不应该依赖于结果的顺序。您应该将订单视为随机。看起来它是Meal而不是Position的排序。我不知道为什么会这样,但即使 也可能不可靠。如果订单很重要,请使用ORDER BY