2011-04-01 75 views
2

我建立一个信息系统,使我的客户将消息发送到基于其生物知名客户..SQL匹配标准

我有以下表

message 
    -------- 
    id(pk) 1 
    message 'This is a message' 

    message_bio 
    --------- 
    idPK question_id answer_id message_id (fk for message table) 
    1  1    4   1 
    2  2    3   1 
    3  3    2   1 

    customer_bio 
    ------------- 
    id customer_id question_id answer_id 
    1  1   1    4 
    2  1   2    3 
    3  1   3    2 
    4  2   1    4 
    5  2   2    3 
    6  2   3    6 

    question_table 
    id  question 
    1  gender etc.. 

因此客户表链接到客户生物,其中有答案的问题的答案..

基本上只需要客户1来,因为它是一个完整的匹配不是部分..我试过内/左连接..感觉像一些简单,但不能让我的头靠近它..

不胜感激任何帮助..

+0

我不知道你在这里试图做什么。哪些是customer_bio和message_bio中的主键?你如何将一个与另一个联系起来?什么是bio_q和bio_a?而不是用虚拟数据显示示例行,请描述表结构和**它们之间的关系**。然后人们可以更好地了解你在这里完成的任务。 – 2011-04-01 12:10:31

+0

message_bio和customer_bio不直接相关..他们是通过问题和答案..因此,例如..消息需要发送到性别= 1,职业= 2,favourite_food = 4它需要找到谁拥有的客户完全匹配 – Alessandro 2011-04-01 12:53:49

回答

3

如果我理解你想找到有关于该消息的所有问题一样答案customer_bio记录你的问题。

为了做到这一点,您需要将客户问题的数量与匹配邮件记录的数量进行比较。

SELECT c.*, m.* 
FROM customer c 
     INNER JOIN (SELECT mb.message_id, 
          cb.customer_id, 
          COUNT(mb.question_id) match_count 
        FROM customer_bio cb 
          INNER JOIN message_bio mb 
          ON cb.question_id = mb.question_id 
           AND cb.answer_id = mb.answer_id 
        GROUP BY mb.message_id, 
          cb.customer_id) message_matches 
     ON c.customer_id = message_matches.customer_id 
     INNER JOIN (SELECT cb.customer_id, 
          COUNT(cb.question_id) 
        FROM customer_bio 
        GROUP BY customer_id) customer_count 
     ON message_matches.customer_id = customer_count.customer_id 
      AND message_matches.match_count = customer_count.customer_count 
     INNER JOIN messages m 
     ON m.message_id = message_matches.message_id