预订系统中的SQL C#

时间:2014-05-05 20:01:33

标签: c# sql

在我的预订系统中,我有三张桌子:tbl_times随时都有。 tbl_client包含所有客户端,tbl_app包含所有预约约会。

我想编写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();

4 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

你想要

LEFT join tbl_times 

LEFT join将返回左表中的所有行。

您应该重新考虑使用包含1列的表格

编辑:

考虑为时间添加ID以便更轻松地使用SQL /语法

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

答案 2 :(得分: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

答案 3 :(得分: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