C# 预订系统C中的SQL#
在我的预订系统中,我有三张桌子:tbl_times和all Time。tbl_客户端和所有客户端,tbl_应用程序和所有预约 我想编写SQL来显示tbl_times中的所有时间,以及在特定日期为特定医生预订的时间的客户端名称 甚至可以这样做吗?查看图片以了解我想要显示的内容(黄色约会时间) 我现在有这个代码,但它显示的是预订的时间,而不是所有的时间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
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