1

嗨,我正在学习MySQL加入。从教程中我得到了两张桌子。

在此处输入图像描述

查询是

<?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 />";
}
?>

结果是

在此处输入图像描述

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

Dad|steak
Dad|Tacos
Mom|Salad

但结果不同。搜索的工作方式和结果集的组织方式。请帮助我了解这是如何工作的,在此先感谢您......

4

1 回答 1

0

我会重写这个查询:

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

您可以使用条件WHERE子句JOIN——MySQL 会以任何一种方式对其进行优化,但通常首选使用ON/ USINGforJOIN条件的语法。您也可以在NATURAL JOIN此处使用 a,但这可能不安全。

至于您的具体问题,我不知道为什么 MySQL 以一种或另一种方式排序。我唯一可以告诉您的是,如果您不指定ORDER BY子句,则不应依赖结果的顺序。您应该将订单视为随机的。似乎它是按Meal而不是订购Position。我不知道为什么会这样,但即使这样也可能不可靠。当订单很重要时,请使用ORDER BY.

于 2012-07-09T14:05:20.537 回答