2014-01-24 41 views
0

我正在处理查询,它多次显示相同的行,只是在两个行之间交替。我测试过从所有提到的表中选择每一列,但没有看到行之间的差异。请注意,应该只有两个返回的行,并且我越过了10.sql select多次返回相同的行集合

我认为这与将trc表连接到mlc表有关,但我被困在如何解决它。任何帮助表示赞赏。谢谢。

SELECT mlc.click_amount AS memPayout 
     FROM tbl_trackvalue AS trv, tbl_tracking AS t, tbl_offers AS off, tblusers AS usr, tbl_mailchimp_trackvalue as mlc 
     WHERE mlc.tracking_id = trv.tracking_id 
       AND off.id = t.offer_id 
       AND off.offer_type = 'mailchimp' 
       AND usr.id = trv.tr_user_id 
       AND trv.tr_user_id =1454 
       AND mlc.requested_date = '2014-01-21' 
       AND mlc.payment_status = 'pending' 
       AND mlc.requested_status = 'declined' 

更新的代码:。

SELECT mlc.click_amount AS memPayout 
             FROM tbl_trackvalue AS trv, tbl_offers AS off, tbl_mailchimp_trackvalue as mlc 
             WHERE mlc.tracking_id = trv.tracking_id 
             AND off.id = trv.tr_offer_id 
             AND off.offer_type = 'mailchimp' 
             AND trv.tr_user_id =1454 
             AND mlc.requested_date = '2014-01-21' 
             AND mlc.payment_status = 'pending' 
             AND mlc.requested_status = 'declined' 

UPDATE II(又改了,这一次它的工作原理感谢您的帮助,我很新的,现在实现的是明确与命名加入重要性:

SELECT mlc.click_amount AS memPayout 
    FROM tbl_mailchimp_trackvalue as mlc inner join tbl_trackvalue AS trv on mlc.tracking_id=trv.tracking_id 
    WHERE trv.type = 'mailchimp' 
    AND trv.tr_user_id =1454 
    AND mlc.requested_date = '2014-01-21' 
    AND mlc.payment_status = 'pending' 
    AND mlc.requested_status = 'declined' 
+2

您很可能错过了加入,应该发布您的表格结构或创建http://sqlfiddle.com/。 – Sumit

+0

如果你使用'inner join',你可能会发现你的连接和where子句中的过滤器有更明显的区别。这也将帮助你发现你在他们中犯的任何错误。 – GolezTrol

+0

看起来像你的tblusers表连接是相当无用的。 – Xardas

回答

0

年。您加入t,off,您加入和mlc,但这两个连接块之间永远不会有任何连接。

+0

感谢您的回复。我对这一切都很陌生。你是否说我需要将每张提到的桌子和其他提到的桌子一起加入?我更新了我的代码以反映一些想法。 – programmingnewb

+0

您不需要加入每张桌子上的每张桌子,但应指定所有相关条件。如果你没有条件加入,你将得到的行数是A中B行的行数。你需要通过指定A和B之间的关系来缩小它的范围。在原始查询中,大多数那些关系在那里,但是当你没有关系时,你有两组表。由于您没有指定表格结构,因此很难解释究竟要添加什么,但我想应该在'trackvalue'和'tracking'之间建立一个链接,但您没有指定。 – GolezTrol

+0

“内部连​​接”的优点是(我认为)它是一种更清晰的连接写入方式,可以从过滤器(您放入'where'子句)中分离连接条件(关系)。你也可以使用'left join',如果你想从A中查询与B具有0或更多关系的信息,那么可以使用'left join'。还有'cross join',这与使用逗号分隔表格基本相同,像你一样。 – GolezTrol

0

,以消除重复的行,你可以使用SELECT DISTINCT

+0

你可以这样做,但在你做之前,你应该真的三思。通常你会因为查询中的错误而得到重复行,并且使用'SELECT DISTINCT'可能会(暂时)隐藏这个问题。因此,只有在确定为什么会获得如此多的行时才使用它,而当您对所获得的行数感到惊讶时,不要将其作为补丁。 – GolezTrol