查询3个表没有重复

时间:2014-09-10 21:24:18

标签: php mysql sql

我有3张桌子:
Jobs | messages | Quotes

jobs表包含有关已发布作业的所有信息。 job_idauto_increment。 如果针对message发布了一条消息,jobs job_id s表中会包含一条消息。

Quotes表包含针对jobs job_id提交的任何引号。

我想:

 select all from jobs where ...blah
 select if exists from messages any message where messages table job_id = job table job_id
 select if exists from quotes any quote where quotes job_id = job table job_id
这可能吗?我做了这个左连接查询,但它给出了重复的结果。

    $sql = "SELECT DISTINCT jobs.job_id AS jobid,
    jobs.worktitle AS wrktitle,
    jobs.workinfo AS wrkinfo,
    messages.message AS msg FROM jobs 
    LEFT JOIN messages ON
    jobs.job_id = messages.job_id
    LEFT JOIN quotes ON
    jobs.job_id = quotes.workid";

请帮忙!谢谢史蒂夫

对不起,我的问题不是很好。我试图查询我的工作表,这是直截了当的。但是我通过作业ID列有2个与此表关联的其他表。消息和报价。消息表包含通过作业ID询问有关特定作业的任何问题 - 报价表包含通过作业ID针对特定作业提交的任何报价。我试图查询作业表并通过作业ID加入消息和引用表。但是这会给出jobs表的重复行。是否可以查询作业表,并显示任何消息或引号? - Stevie P

1 个答案:

答案 0 :(得分:0)

来自OP: “


工作ID --- 001

标题---替换窗口

详情--- blah blah

消息 - 消息1

报价 - £100


工作ID --- 001

标题---替换窗口

详情--- blah blah

消息 - 消息2

报价 - £90


工作ID --- 001

标题---替换窗口

详情--- blah blah

消息 - 消息3

报价 - £110


我在哪里

Job id --- 001 

title  --- replace window

Details --- blah blah

message -- message 1

           message 2

           message 3

quotes --  £100

           £90

           £110 

鉴于引号和消息的数量可以增加,结果集的列数或行数也必须增加。 SQL通常返回重复的行,但有PIVOT函数可以添加列。请参阅此处:Dynamically create columns sql但换句话说,在一对多关系(一个Job到多个引号)中,每个记录将返回一行,其中作业相关< / em>报价。

但是,在SQL中没有什么可以做到的,以产生所需的结果,所以你必须在PHP或任何你的前端。我会做的是将第一个作业ID,标题,详细信息写入屏幕,然后循环结果集添加引号和消息,直到找到新的作业ID,然后重复。对不起,我没有PHP答案。