2017-02-04 58 views
0
mysql> select * from Orders; 
+------+------+------+------------+------------+ 
| ONO | CNO | ENO | RECEIVED | SHIPPED | 
+------+------+------+------------+------------+ 
| 1020 | 1111 | 1000 | 1994-12-10 | 1994-12-12 | 
| 1021 | 1111 | 1000 | 1995-01-12 | 1995-01-15 | 
| 1022 | 2222 | 1001 | 1995-02-13 | 1995-02-20 | 
| 1023 | 3333 | 1000 | 2003-02-15 | NULL  | 
| 1024 | 4444 | 1000 | 2003-02-15 | 2003-02-16 | 
| 1025 | 5555 | 1000 | 2003-02-15 | 2003-02-16 | 
+------+------+------+------------+------------+ 

mysql> select * from Employees; 
+------+--------+-------+------------+ 
| ENO | ENAME | ZIP | HDATE  | 
+------+--------+-------+------------+ 
| 1000 | Jones | 67226 | 1995-12-12 | 
| 1001 | Smith | 60606 | 1992-01-01 | 
| 1002 | Brown | 50302 | 1994-09-01 | 
| 1003 | Green | 28411 | 2002-09-01 | 
| 1004 | Purple | 28411 | 2003-01-01 | 
+------+--------+-------+------------+ 

mysql> select * from Customers; 
+------+---------+------------------+-------+--------------+ 
| CNO | CNAME | STREET   | ZIP | PHONE  | 
+------+---------+------------------+-------+--------------+ 
| 1111 | Charles | 123 Main St.  | 67226 | 316-636-5555 | 
| 2222 | Bertram | 237 Ash Avenue | 67226 | 316-689-5555 | 
| 3333 | Barbara | 111 Inwood St. | 60606 | 316-111-1234 | 
| 4444 | Will | 111 Kenwood St. | 54444 | 416-111-1234 | 
| 5555 | Bill | 211 Marlwood St. | 28408 | 416-111-1235 | 
| 6666 | Keely | 211 Pinewood St. | 28411 | 416-111-1235 | 
| 7777 | Maera | 211 Marlwood St. | 28408 | 416-111-1235 | 
+------+---------+------------------+-------+--------------+ 

我需要:获取cnameename对使得具有名字 cname客户已经下了订单通过员工与名ename如何使特定的查询在MySQL

我敢肯定,这似乎很容易,但我还没有能够 这一点。我试过这个:

select distinct Customers.CNAME, Employees.ENAME 
from Customers, Employees 
where Customers.CNO in (
    select Customers.CNO 
    from Customers, Orders 
    where Customers.CNO = Orders.CNO 
) and 
where Employees.ENO in (
    select Employees.ENO 
    from Orders, Employees 
    where Employees.ENO = Orders.ENO 
); 

在多个版本,但我似乎无法得到它的工作。这是我第一次使用SQL,所以对我来说是非常新的。我真的很感激任何帮助。

+1

不要在使用,使用JOIN,这将是简单的。 –

+0

但我怎么用3张桌子呢?在我的脑海里做两个表的连接很简单,但是它让我感到困惑。我尝试过嵌套它们,但我只是得到错误。 – XXIV

回答

0
select customers.CNAME, employees.ENAME from customers 
inner join orders on customers.CNO = orders.CNO 
inner join employees on orders.ENO = employees.ENO; 

使用连接语句品牌它更容易阅读你正在尝试做的SQL。这会将订单表与客户关于CNO值和订单表中的员工与ENO值结合起来。然后选择两列进行显示。

+0

非常感谢。我很惭愧地说我花了多少时间在这个问题上,所以这非常有帮助。这个连接使得可读性好得多,让我更了解这个过程。 – XXIV

0

你可以使用select distinc有一对加盟(左连接,如果可能的条件不匹配,或者内部联接,如果以往任何时候都匹配)

select distinct c.cname, e.ename 
from Customers as c 
left join Orders as o as o on o.cno = c.cno 
left join Employees on e.eno = o.eno 

select distinct c.cname, e.ename 
from Customers as c 
inner join Orders as o as o on o.cno = c.cno 
inner join Employees on e.eno = o.eno 
+0

我认为在那些 –

+0

@SamiKuhmonen中有几个别名错误是...正确..谢谢..回答更新 – scaisEdge

0

试试这个

SELECT DISTINCT Customers.CNAME,Employees.ENAME FROM Customers 
JOIN Orders ON Customers.CNO=Orders.CNO 
JOIN Employees ON Employees.ENO=Orders.ENO; 

SELECT DISTINCT Customers.CNAME,Employees.ENAME from Customers 
JOIN Orders USING (CNO) 
JOIN Employees USING(ENO); 
0
SELECT DISTINCT c.cname, e.ename 
    FROM orders o 
    JOIN employees e USING (eno) 
    JOIN clients c USING (cno);