检查这个需要,mysql查询

时间:2011-03-07 06:34:56

标签: mysql

table ab:
partyid          conatctpurpose
1                  general
1                  shipping
1                  phone
1                  fax
2                  general
2                  shipping
2                  phone
3                  phone
3                  fax
3                  mail
4                  GENERAL
5                  fax

每个partyid都应分配强制性的3个联系目的(一般,运输,电话)
partyid可以提供其他可选的联系方式

写一个查询以返回没有分配上述强制性联系目的的partyid。

3 个答案:

答案 0 :(得分:1)

虽然NOT IN不是最佳查询,但如果数据集不是很大,则可以使用它。

Select partyid from table_ab where contactpurpose NOT IN ('general','shipping','phone');

答案 1 :(得分:1)

试试这个:

SELECT partyid
  FROM ab
WHERE   conatctpurpose IN ('general','shipping','phone')
GROUP BY partyid
HAVING COUNT(DISTINCT conatctpurpose) < 3

答案 2 :(得分:0)

@above感谢各位朋友的支持。最后我得到了我的解决方案。

- 很多人教这是一个家庭作业,noob问题等。 - 这是我们项目的数据检查报告

(从(SELECT party_id,count(distinct contact_mech_purpose_type_id)中选择party_id作为c FROM party_contact_mech_purpose  哪里 contact_mech_purpose_type_id in ( 'BILLING_LOCATION', 'PAYMENT_LOCATION', 'SHIPPING_LOCATION', 'SHIP_ORIG_LOCATION') group by party_id)t其中c <4)

联合

(从party_contact_mech_purpose中选择party_id,其中party_id不在(SELECT party_id FROM party_contact_mech_purpose)  哪里 contact_mech_purpose_type_id in ( 'BILLING_LOCATION', 'PAYMENT_LOCATION', 'SHIPPING_LOCATION', 'SHIP_ORiG_LOCATION') group by party_id))

按party_id订购