如果我有
SELECT * FROM Table1 t1
LEFT JOIN Table2 t2 ON t1.id = t2.id
WHERE t1.user='bob';
WHERE
子句在两个表JOINED
之后运行吗?
如何在JOIN之前运行它?
答案 0 :(得分:78)
where
子句将在join
之前执行,以便它不会加入不必要的记录。所以你的代码就好了。
答案 1 :(得分:24)
将WHERE
更改为另一个JOIN
条件
LEFT JOIN Table2 t2 on t1.id = t2.id AND t1.user='bob'
答案 2 :(得分:2)
根据我在左连接中的经验,您无法排除“左”和“左”中的记录。 (t1)ON语句中的表,因为 - 根据定义 - 将包括所有t1记录。 where语句确实有效,因为它将在之后应用于连接的结果。
我并不完全知道你想要达到的目的,但很可能内部联接也适合你的需要,然后你可以添加t1.user =' bob'条件到ON语句。
但如果Mosty Mostacho是正确的,那么条件的位置(WHERE vs ON)与执行速度无关。
答案 3 :(得分:0)
你可以做到
SELECT *
FROM Table1 t1
LEFT JOIN Table2 t2
ON t1.id=t2.id AND t1.user='bob';
答案 4 :(得分:0)
RIGHT JOIN是解决方案:
SELECT cars.manufacturer, cars.year FROM cars
RIGHT JOIN (SELECT m.manufacturer FROM cars AS m ORDER BY m.year DESC LIMIT 3) subq
ON cars.manufacturer=subq.manufacturer
还没有完全严格,但似乎有效。
答案 5 :(得分:0)
您应该只将x-session-id:\s+(.+)
条件添加到t1.user='bob'
子句中,然后再附加其他条件,它将首先被评估:
ON
答案 6 :(得分:0)
您可以使用的是FROM后面的表表达式,如下所示:
<?php
$postData = array(
'name' => 'postmanole',
'password' => 'password'
);
$ch = curl_init();
curl_setopt_array($ch, array(
CURLOPT_URL => 'http://a.localhost/login',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
));
$output = curl_exec($ch);
echo $output;
?>