C# 预订系统C中的SQL#

C# 预订系统C中的SQL#,c#,sql,C#,Sql,在我的预订系统中,我有三张桌子:tbl_times和all Time。tbl_客户端和所有客户端,tbl_应用程序和所有预约 我想编写SQL来显示tbl_times中的所有时间,以及在特定日期为特定医生预订的时间的客户端名称 甚至可以这样做吗?查看图片以了解我想要显示的内容(黄色约会时间) 我现在有这个代码,但它显示的是预订的时间,而不是所有的时间 conn.Open(); string sql = "SELECT tbl_app.time, tbl_client.clientname FROM

在我的预订系统中,我有三张桌子:tbl_times和all Time。tbl_客户端和所有客户端,tbl_应用程序和所有预约

我想编写SQL来显示tbl_times中的所有时间,以及在特定日期为特定医生预订的时间的客户端名称

甚至可以这样做吗?查看图片以了解我想要显示的内容(黄色约会时间)

我现在有这个代码,但它显示的是预订的时间,而不是所有的时间

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();
像这样试试

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
你想

LEFT join tbl_times 
左联接将返回左表中的所有行

不过,您应该重新考虑使用一列的表

编辑:

考虑在times中添加一个ID以简化SQL/语法

timeID|次
0 | 08:00
1 | 08:30
2 | 09:00


etc

以下是我要做的:

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

tbl_times
tbl_app
分别共享一个时间列
times
time
。这两列中的行值相同吗?如果是这样,您可能不需要
tbl\u时间
,也可以
tbl\u客户端上加入
tbl\u应用程序
客户端ID
上。我需要tbl\u时间用于其他目的,所以我希望保留所有时间,而不仅仅是预定时间。您需要一个
LEFT JOIN
,这样
tbl\u应用程序中的时间就不会过滤掉记录了。@Ek0nomik,确实如此。谢谢你指出这一点。我试过你的代码,但它显示了所有预定的约会。我只想预约某个日期和某个医生,以及所有times@user2939293像Rahul现在所做的那样,将标准包括在
左连接
标准中,这是唯一正确的方法。如果包含在
的where
中,没有预约的时间仍然会被过滤掉。@Rahul,tbl_客户端上的连接也应该是左连接谢谢,但是我需要tbl_times表用于其他目的,即使它只有一列。不,这与我的SQL给出的输出完全相同。无论如何谢谢你!
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