2014-05-05 121 views
0

在我的預訂系統中,我有三個表:tbl_times與所有時間。 tbl_client與所有客戶端和tbl_app與所有預約約會。預訂系統中的SQL C#

我想編寫SQL來顯示tbl_times的所有時間以及特定日期某個醫生預訂的時間的客戶端名稱。

甚至有可能這樣做嗎?查看我想要顯示的圖片(黃色預約時間)。 enter image description here

我現在有這個代碼,但它顯示預訂的時間,而不是所有的時間。

conn.Open(); 
string sql = "SELECT tbl_app.time, tbl_client.clientname FROM tbl_app, tbl_client WHERE tbl_app.date = '2014-05-05' AND tbl_app.drId = '4' AND tbl_client.clientId = tbl_app.clientId"; 

DataSet ds = new DataSet(); 
DataTable dt = new DataTable(); 
NpgsqlDataAdapter da = new NpgsqlDataAdapter(sql, conn); 
ds.Reset(); 
da.Fill(ds); 
dt = ds.Tables[0]; 
GridView1.DataSource = dt;    
GridView1.DataBind(); 
+0

'tbl_times'和'tbl_app'分別分享一個時間列'times'和'time'。這兩列中的行值是否相同?如果是這樣的話,你可能不需要'tbl_times',並且可能''在'tbl_client'' ON''clientId'上加入'tbl_app'。 – Aaron

+0

我需要tbl_times作其他用途,所以我想保留它 – user2939293

回答

2

嘗試這樣

select t.times, 
ISNULL(tc.clientname,'') as clientname 
from tbl_times t 
left join tbl_app ta 
on t.times = ta.times 
and ta.date = '2014-05-05' AND ta.drId = '4' 
left join tbl_client tc 
on ta.clientid = tc.clientid 
+0

他希望*所有*次,而不僅僅是預訂時間。你需要一個'LEFT JOIN',所以'tbl_app'中的時間不會過濾掉記錄。 –

+0

@ Ek0nomik,的確如此。感謝您指出了這一點。 – Rahul

+0

我試過你的代碼,但它顯示所有預約約會。我只想約會某個日期和某個醫生,連同所有時間 – user2939293

0

你想

LEFT join tbl_times 

左連接將返回左表中的所有行。

你應該重新考慮其與1列的表雖然

編輯:

考慮/添加ID時代更容易SQL語法

TIMEID |倍
0 | 08:00
1 | 08:30
2 | 09:00

+0

謝謝,但我需要表tbl_times用於其他目的,甚至認爲它只有一列。 – user2939293

+0

我編輯了我的答案 –

+0

好的,這是一個好主意,謝謝 – user2939293

0
SELECT t.times time, c.clientname FROM tbl_times t 
LEFT JOIN tbl_app a ON a.time = t.times 
LEFT JOIN tbl_client c ON c.clientid = a.clientid 
0

這裏是我會做:

SELECT a.time, c.clientname 
FROM tbl_times t 
LEFT JOIN tbl_app a on t.time = t.time 
JOIN tbl_client c on a.clientid = c.clientid 
WHERE a.drID = 4 and a.date = '2014-05-05' 

編輯:上面的代碼不工作。下面的代碼確實有效,它使用了子查詢。如果您的選擇標準變得更加複雜,這可能是一個好方法。

select t.[time], ISNULL(c.clientname, '') as clientname from 
tbl_times t 
left join (select * from tbl_app where drID = 4 and [date] = '2014-05-05') 
as doc on t.time = doc.[time] 
left join tbl_client c on doc.clientID = c.clientID 
+0

不,這給出了與我的SQL相同的確切輸出。不管怎麼說,還是要謝謝你! – user2939293