2014-09-10 54 views
0

我有3個表:
Jobs | messages | Quotes查詢3個表沒有重複

jobs表有大約發佈的工作的所有信息。 job_idauto_increment。 如果對jobs job_id發佈消息,message表中會包含一條消息。

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"; 

請幫忙!謝謝史蒂夫

好的抱歉我的問題不是很好。我試圖查詢我的工作表,這是直截了當的。不過,我有2個其他表通過作業ID列與此表關聯。消息和報價。消息表包含通過作業ID詢問關於特定作業的任何問題 - 引用表包含通過作業ID針對特定作業提交的任何引用。我試圖查詢作業表並通過作業ID加入消息和引用表。但是這會給作業表的重複行。是否有可能查詢作業表,並顯示任何消息或報價? - 傑拉德P

+0

所以你想要同時有消息和報價的工作? – Bulat 2014-09-10 21:31:44

+3

如果您可以發佈樣本數據和預期結果,它將有所幫助。考慮使用SqlFiddle.com並添加鏈接到模式與數據到您的問題。 – Bulat 2014-09-10 21:32:31

+0

是的,我想工作 - 顯示結果,並與任何消息和任何報價一起顯示具有相同的工作ID即時對不起我新和不知道如何做其他東西你問 – 2014-09-10 21:35:57

回答

0

從OP: 「


作業ID --- 001

標題---更換窗口

詳細---等等等等

消息 - 留言1

報價 - £100


作業ID --- 001

標題---更換窗口

詳細---等等等等

消息 - 消息2

報價 - £ 90


Job id --- 001

標題---更換窗口

詳細---等等等等

消息 - 消息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但換句話說,在一對多關係(一個工作對多引號)中,一行將返回每個記錄,其中一個工作是相關到報價。

但是,在SQL中沒有任何理由能夠產生所需的結果,因此您必須在PHP或任何您的前端執行此操作。我會做的是將第一個作業ID,標題,細節寫入屏幕,然後遍歷結果集添加引號和消息,直到找到新的作業ID,然後重複。對不起,我沒有PHP答案。