2014-01-07 4 views
0

У меня есть 2 таблицы заказов и клиентов с данными как:Inner/Outer заспорить в MySQL

mysql> select * from orders; 
+---------+----------------+----------+-------+ 
| orderid | product  | customer | price | 
+---------+----------------+----------+-------+ 
|  292 | sofa   |  101 | 6000 | 
|  293 | table   |  105 | 3000 | 
|  294 | table   |  104 | 1450 | 
|  295 | table   |  101 | 1200 | 
|  296 | chair   |  103 | 800 | 
|  297 | dressing table |  104 | 9000 | 
|  298 | corner   |  102 | 1000 | 
|  299 | corner   |  102 | 900 | 
|  300 | bed   |  NULL | NULL | 
|  301 | door   |  NULL | NULL | 
+---------+----------------+----------+-------+ 
10 rows in set (0.00 sec) 


mysql> select * from customers; 
+--------+----------+-----------+ 
| custid | name  | location | 
+--------+----------+-----------+ 
| 101 | jaspreet | New delhi | 
| 102 | harpreet | Jalandhr | 
| 103 | surjit | Amritsar | 
| 104 | harneet | ludhiana | 
| 105 | hashar | New Delhi | 
| 106 | harneet | NULL  | 
+--------+----------+-----------+ 
6 rows in set (0.00 sec) 

Когда я бегу внутреннее соединение, она возвращает следующие данные:

mysql> select orders.orderid,customers.name from orders inner join customers where orders.customer=customers.custid; 
+---------+----------+ 
| orderid | name  | 
+---------+----------+ 
|  292 | jaspreet | 
|  295 | jaspreet | 
|  298 | harpreet | 
|  299 | harpreet | 
|  296 | surjit | 
|  294 | harneet | 
|  297 | harneet | 
|  293 | hashar | 
+---------+----------+ 
8 rows in set (0.00 sec) 

но внешняя joins не работают над этим.

mysql> select orders.orderid,customers.name from orders left join customers where orders.customer=customers.custid; 

ERROR 1064 (42000): У вас ошибка в вашем SQL синтаксиса; проверить руководство, которое соответствует Вашей версии сервера MySQL для синтаксиса право использовать п ухо «где orders.customer = customers.custid» в строке 1

Может кто-то помочь мне с этой концепцией?

Заранее спасибо

+0

Явное использование слова 'join' требует слово' on' для замены 'where' – Rugal

ответ

3

Условие JOIN задается ON, не WHERE:

SELECT orders.orderid, 
     customers.name 
FROM orders 
     LEFT JOIN customers 
       ON orders.customer = customers.custid; 

Вы должны использовать этот как внутренние, так и внешние соединения. WHERE следует использовать для условий на отдельных таблицах, а не для условий соединения.

Вам удалось уйти без этого для внутреннего соединения, потому что соединение без предложения ON выполняет полный перекрестный продукт, а затем фильтры WHERE, основанные на тестировании по этому вопросу. Я не уверен, почему, но вы не можете сделать это с помощью внешнего соединения.

+0

Спасибо за решение. Единственная проблема заключалась в том, что во внутреннем соединении. Ваше разъяснение также решает это сомнение, что «где» реализуется во внутреннем. Я фактически выполнил внутренние команды select order.orderid, customers.name из заказов клиентов внутреннего соединения; без какой-либо статьи, и это дало мне полный перекрестный продукт. благодаря – jazz199

4

Вы ищете ON не WHERE:

SELECT orders.orderid, 
     customers.name 
FROM orders 
     LEFT JOIN customers 
       ON orders.customer = customers.custid; 
Смежные вопросы