【发布时间】:2012-07-09 12:28:33
【问题描述】:
嗨,我正在学习 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
但结果不同。搜索的工作方式和结果集的组织方式。请帮助我了解这是如何工作的,在此先感谢您......
【问题讨论】:
-
使用
INNER JOIN获得所需的输出 -
@diEcho,是的,我知道如何使用内部、左右连接。但问题是,我想知道结果集是如何在内部处理的。是将食物表的位置值与家庭表位置值中的每个位置值进行比较,反之亦然。
-
Sql 是声明性语言 - 你说你想要什么,它会尝试执行最有效的查询。在此实例中,优化器将
1:n关系中的n表作为主要来源。还要记住 Sql 不保证行的顺序。您需要明确订购它们。 -
您将受益于采用正确的连接语法。加入和过滤之间的区别将大大简化阅读查询。