我现在遇到一个非常令人困惑的逻辑来查询某种记录。现在,我有一个表格,其中包含与 ProductID 和 UserEmail 相关联的各种记录。我需要一个确切的sql语句来产生我需要的结果。我想在这里做的是查询或获取与该UserEmail的 ProductID相关联的 ProductIDs 的记录集,并将该记录排除在具有该特定UserEmail的记录之后。查看例如,我在下面有一个表格,我想获取 ProductIDs 的所有记录集,其中 UserEmail = myemail@myemail.com 并排除具有该记录的特定记录USEREMAIL。 我尝试了一些使用join的语句,我最终使用了这个语句但仍然会返回空值。
SELECT DISTINCT ProductID,UserEmail,Comments,UserName FROM [ProdCommentsTab]
WHERE NOT EXISTS( SELECT ProductID,UserEmail,Comments,UserName FROM [ProdCommentsTab]
WHERE UserEmail = @useremail)
表格
**ProductID** **UserEmail** **UserName** **Comments**
c764cbc3 ddgdfh43@yahoo.com dfgfdhfdhfg fgshhfdfgh fhdfhhfgj
c764cbc3 myemail@myemail.com MyName dgsfdhfg fghdfjghj
c764cbc3 mitmak84@outlook.com dgdfgfhfhf dgsdgdf fghfdhfg
f08b9787 dgsdhf23@gmail.com dfgsdffhhf dfgsdhf fhfhfhf fhfhfh
f08b9787 dgsdfgf67@yahoo.com dgsdgdfhfgh dfgshf fhdfhg
f08b9787 myemail@myemail.com MyName sdsdgdsgf dfhfhfdg
f08b9787 sdgsdhf@outlook.com dgsdgfhfdg dgsdfhffh fghdjghj
b1d9dd41 dfsfhfgh45@gmail.com dsgdfgd sdgdsgfd fhfdhfg
b1d9dd41 myemail@myemail.com MyName dgsdhfdg fghdjgj
e4f9cvd21 sdfgdfdf@yahoo.com dgsdfhfdfg dfgshfg fggjgh fghgjg
e4f9cvd21 sdfdgdf@gmail.com dfgdshfhf dfgdhfg fghdfggjg
输出结果应如下所示
**ProductID** **UserEmail** **UserName** **Comments**
c764cbc3 ddgdfh43@yahoo.com dfgfdhfdhfg fgshhfdfgh fhdfhhfgj
c764cbc3 mitmak84@outlook.com dgdfgfhfhf dgsdgdf fghfdhfg
f08b9787 dgsdhf23@gmail.com dfgsdffhhf dfgsdhf fhfhfhf fhfhfh
f08b9787 dgsdfgf67@yahoo.com dgsdgdfhfgh dfgshf fhdfhg
f08b9787 sdgsdhf@outlook.com dgsdgfhfdg dgsdfhffh fghdjghj
b1d9dd41 dfsfhfgh45@gmail.com dsgdfgd sdgdsgfd fhfdhfg
答案 0 :(得分:2)
首先,EXISTS或NOT EXISTS子句应该是相关的,即你应该将记录与你的外部查询联系起来。 (或使用IN使其不相关。)您想要EXISTS,因为您正在寻找电子邮件存在的产品。
然后,您必须在WHERE子句中使用电子邮件本身排除记录。
这里根本不需要DISTINCT。为什么表中会有重复记录?
所以:
Error in ga$getData(id, start.date = start_date, end.date = end_date, :
error in fetching data: Quota Error: profileId ga:XXXXXXXXX has exceeded the daily request limit.
SQL小提琴:http://www.sqlfiddle.com/#!3/f2644/2
或者使用IN:
select productid, useremail, comments, username
from prodcommentstab this
where exists
(
select *
from prodcommentstab other
where other.useremail = @useremail
and other.productid = this.productid
)
and useremail <> @useremail;
SQL小提琴:http://www.sqlfiddle.com/#!3/f2644/3
既然您的问题已不再标记为MySQL,那么您只需阅读一次表格即可。它使用分析函数来检查产品是否具有相关电子邮件的条目。由于分析函数不能在WHERE原因中使用,我们需要外部查询来过滤结果。
select productid, useremail, comments, username
from prodcommentstab
where productid in
(
select productid
from prodcommentstab
where useremail = @useremail
)
and useremail <> @useremail;
SQL小提琴:http://www.sqlfiddle.com/#!3/f2644/4
通常只扫描一次表来收集所有数据的查询要快得多,所以你可以尝试一下。
答案 1 :(得分:0)
使用自我加入。首先找到与输入电子邮件相关的所有行,一旦找到这些数据,就可以在相同的产品上加入相同的表,但不同的电子邮件ID。尝试使用此:
INotifyPropertyChanged