MYSQL内连接三到四个表

时间:2013-05-21 21:16:38

标签: mysql inner-join

我需要弄明白我做错了什么。我为mysql创建了这个内部联接代码。它工作但它给了我重复的值,如重复两次特定行或categoryid两次。每个表(用户,paymentnotification,monthlyreturns)都有用于检查和显示用户表中的用户名(users.pname)的categoryid,然后使用categoryid检查并显示已从月度退货和付款表中付款的那些

$r="SELECT monthlyreturns.categoryid, monthlyreturns.month, monthlyreturns.quarter, monthlyreturns.year,paymentnotification.amount, users.pname, monthlyreturns.ototal, paymentnotification.payee, status
FROM paymentnotification 
INNER JOIN (monthlyreturns INNER JOIN users ON monthlyreturns.categoryid=users.categoryid) 
ON monthlyreturns.categoryid=paymentnotification.categoryid 
ORDER BY monthlyreturns.categoryid DESC";

4 个答案:

答案 0 :(得分:1)

假设我明白你要做什么,你就没有正确地加入你的桌子。尝试一次加入一个

SELECT DISTINCT monthlyreturns.categoryid, monthlyreturns.month, monthlyreturns.quarter, monthlyreturns.year,paym entnotification.amount, users.pname, monthlyreturns.ototal, paymentnotification.payee, status
FROM paymentnotification 
INNER JOIN monthlyreturns
ON paymentnotification.categoryid = monthlyreturns.categoryid
INNER JOIN users 
ON monthlyreturns.categoryid = users.categoryid
ORDER BY monthlyreturns.categoryid DESC

答案 1 :(得分:1)

我认为您想要的查询更像是这样:

SELECT b.categoryid, b.month, b.quarter, b.year, a.amount, c.pname, b.ototal, a.payee, status
FROM paymentnotification a
INNER JOIN monthlyreturns b
   ON a.categoryid = b.categoryid
INNER JOIN users c
   ON b.categoryid = c.categoryid
ORDER BY b.categoryid DESC

您进行相关的方式似乎并不明确,可能会导致问题。试一试,看看会发生什么。如果它仍然重复,可能数据的性质需要进一步过滤。

答案 2 :(得分:0)

我没有看到任何问题..我得到4个结果行:检查这个小提琴http://sqlfiddle.com/#!2/165a22/5

这是我使用的查询:

SELECT m.categoryid, m.month, m.quarter, m.year,p.amount, u.pname, m.ototal, p.payee, m.status
FROM paymentnotification p JOIN monthlyreturns m ON p.categoryid = m.categoryid
JOIN users u ON u.categoryid = m.categoryid
ORDER BY m.categoryid DESC

如果考虑您选择的每一列,则没有重复的行,只有“唯一”行。

希望有所帮助

答案 3 :(得分:0)

SELECT M.categoryid,M.month,M.quarter,M.year,M.ototal,

   P.amount, P.payee, P.status,

   U.pname

FROM paymentnotification AS P

INNER JOIN monthlyreturns AS M ON P.categoryid = M.categoryid

INNER JOIN用户AS U ON M.categoryid = U.categoryid

ORC BY M.categoryid DESC