左连接,内连接,加入什么?

时间:2010-11-26 23:46:37

标签: sql mysql

我正在做两个请求,以获得一个值。在我看来,一个会更快。我认为最好的方法是使用join。这是我的代码:

$uid = db_query("SELECT uid FROM TABLE1 WHERE mail = '{$account->mail}' LIMIT 1");
$row = mysql_fetch_array($uid);
$uid = $row[0];


$brief = db_query("SELECT value FROM Table2 WHERE uid = '{$uid}' AND fid = '16' LIMIT 1");
$row = mysql_fetch_array($brief);
$brief = $row[0];`

如何将这两个请求合并为一个?

非常感谢提前!

3 个答案:

答案 0 :(得分:2)

    SELECT value, ui
      FROM TABLE1 T1
INNER JOIN Table2 T2
     USING (uid)
     WHERE mail = '{$account->mail}'
       AND fid = 16
     LIMIT 1

但你的疑问很奇怪。 uid是唯一的吗? fid是唯一的吗?否则,它将选择“随机”行。

基本上,我的查询使用uid列将TABLE1与Table2连接起来,并且只接受mail = $ account-> mail和fid = 16的行。因此,如果有多行,则无法确定哪一个将被选中。

答案 1 :(得分:0)

查询将是:

SELECT TABLE1.uid,TABLE2.value
FROM TABLE1,TABLE2
WHERE TABLE1.mail = '{$account->mail}'
  AND TABLE2.uid = TABLE1.uid
  AND TABLE2.fid = '16'
LIMIT 1

从行中抓取数据:

$uid = $row[0];
$brief = $row[1];

答案 2 :(得分:0)

其他人提供了语法,所以我不再重复。但是关于使用什么类型的连接:

为了获得上述内容,您可以使用带有TABLE1的left join作为连接中的第一个表。

在您的示例中,您始终获得uid,并且您可能会获得value。左连接会给你相同的结果,因为你总是从TABLE1返回结果(uid)和从TABLE2匹配的行(value)。当然,假设mail的值匹配。

注意:据我所知,如果您对邮件列没有唯一约束,使用LIMIT 1可能会掩盖问题。如果TABLE1中有两行具有相同的邮件值,您将永远不会知道此查询。在某些情况下,这可能是您系统中的错误。