2010-04-29 71 views
1
SELECT 
Boats.id, Boats.date, Boats.section, Boats.raft, 
river_company.company, river_section.section AS river 
FROM Boats 
INNER JOIN river_company ON Boats.raft = river_company.id 
INNER JOIN river_section ON Boats.section = river_section.id 
ORDER BY Boats.date DESC, river, river_company.company 

返回我需要的所有內容。但是,如何添加[Photos]表並計算Boats.id在其中發生的次數並將其添加到返回的行中。計數次數ID出現在表中並返回行

因此,如果有5張爲舟#17我想爲船#17的記錄說PHOTOCOUNT = 5

回答

2

你可以一個LEFT JOIN添加到子查詢,如下所示:

LEFT JOIN (SELECT COUNT(p.id) num, p.boatID FROM photos p GROUP BY p.boatID) 
      sub_photos ON (sub_photos.boatID = Boats.id) 
SELECT領域

,然後引用sub_photos.num

這將是這個樣子:

SELECT  Boats.id, Boats.date, Boats.section, Boats.raft, 
      river_company.company, river_section.section AS river, 
      sub_photos.num AS number_of_photos 
FROM  Boats 
INNER JOIN river_company ON Boats.raft = river_company.id 
INNER JOIN river_section ON Boats.section = river_section.id 
LEFT JOIN (SELECT COUNT(p.id) num, p.boatID FROM photos p GROUP BY p.boatID) 
      sub_photos ON (sub_photos.boatID = Boats.id) 
ORDER BY Boats.date DESC, river, river_company.company 
+0

丹尼爾,除了小名改正之外,它的官員!謝謝! Boats.boatID = Boats.ID – Landmine 2010-04-29 07:20:06

+0

@Tyler:剛剛注意到了,修復了......我很高興這有助於:) – 2010-04-29 07:22:41

+0

我也是!你救了我的夜晚! – Landmine 2010-04-29 07:25:23

2

我相信boatsId是在照片表中的列?最簡單的方法是用一個子查詢:

SELECT ...whatever columns..., 

(SELECT COUNT(*) FROM Photos WHERE boatsId = Boats.id) 

FROM ...rest of your query 
+0

你會是對的。 – Landmine 2010-04-29 07:15:42

+0

子查詢返回的值超過1。 – Landmine 2010-04-29 07:17:24

+1

如果你使用這種方法,你應該過濾船ID的子選擇。我認爲加入子查詢對於這種事情更好。 – codingbadger 2010-04-29 07:20:34

1
SELECT Boats.id, 
     Boats.date, 
     Boats.section, 
     Boats.raft, 
     river_company.company, 
     river_section.section AS river 
     (SELECT count(*) FROM Photos WHERE boatsID = Boats.id) 
FROM Boats 
INNER JOIN river_company ON Boats.raft = river_company.id 
INNER JOIN river_section ON Boats.section = river_section.id 
ORDER BY Boats.date DESC, river, river_company.company 

給這一個嘗試。

+0

微小的變化,它很好用!謝謝。 SELECT Boats.id, Boats.date, Boats.section, Boats.raft, river_company.company, river_section.section過江, (SELECT COUNT(*)FROM照片WHERE boatID = Boats.id)作爲PicCount 從船上 INNER JOIN river_company ON Boats.raft = river_company.id INNER JOIN river_section ON Boats.section = river_section.id ORDER BY Boats.date DESC,河流,river_company.company – Landmine 2010-04-29 07:28:06

1

另一種方式:

SELECT 
Boats.id, Boats.date, Boats.section, Boats.raft, 
river_company.company, river_section.section AS river 
Count(Photos.ID) AS PhotoCount 
FROM Boats 
INNER JOIN river_company ON Boats.raft = river_company.id 
INNER JOIN river_section ON Boats.section = river_section.id 
OUTER JOIN Photos ON Boats.id = Photos.BoatID ORDER BY Boats.date DESC, river, river_company.company 
GROUP BY 
    Boats.id, Boats.date, Boats.section, Boats.raft, river_company.company, river_section.section 
1

您還沒有提供關於照片表的結構,但這樣的事情應該爲你工作的任何信息。

SELECT 
Boats.id, Boats.date, Boats.section, Boats.raft, 
river_company.company, river_section.section AS river, 
PhotoCount.NumberOfBoats as PhotoCount 
FROM Boats 
INNER JOIN river_company ON Boats.raft = river_company.id 
INNER JOIN river_section ON Boats.section = river_section.id 
Left Join 
(
    Select b2.Id, Count(b2.Id) as NumberOfBoats 
    From Boats b2 
    Join Photos p on b2.Id = p.BoatId 
    Group By b2.Id 
)BoatCount on BoatCount.Id = Boats.Id 

ORDER BY Boats.date DESC, river, river_company.company 
+0

去與第一篇文章,但還是謝謝你爲你的時間。 – Landmine 2010-04-29 07:26:32

+0

沒問題,歡呼聲 – codingbadger 2010-04-29 07:28:21

+0

我會盡量在將來發布更多細節。再次感謝。 – Landmine 2010-04-29 07:29:30

1

另一種方式

SELECT DISTINCT 
Boats.id, Boats.date, Boats.section, Boats.raft, 
river_company.company, river_section.section AS river, 
count(photos.boatid) OVER(PARTITION BY photos.boatid) 
FROM Boats 
INNER JOIN river_company ON Boats.raft = river_company.id 
INNER JOIN river_section ON Boats.section = river_section.id 
LEFT JOIN photos on photos.boatid = Boats.id 
ORDER BY Boats.date DESC, river, river_company.company 
1

Select YourID, COUNT(*) FROM YourTable GROUP BY YourID

這一切正常,當我試圖追查其中記錄計數可能基於ID或任何其他列是不同的。