Sql 比较子查询中不同类型的2个值
我使用的是MS SQL数据库,我有3个表:“基本信息”、“消息”、“配置”Sql 比较子查询中不同类型的2个值,sql,join,subquery,Sql,Join,Subquery,我使用的是MS SQL数据库,我有3个表:“基本信息”、“消息”、“配置” bases: ID Name NameNum ==================================== 1 Home 101 2 Castle 102 3 Car 103 messages: ID Signal RecBy HQ ============================ 111 120 Home
bases:
ID Name NameNum
====================================
1 Home 101
2 Castle 102
3 Car 103
messages:
ID Signal RecBy HQ
============================
111 120 Home 1
111 110 Castle 1
111 125 Car 1
222 120 Home 2
222 125 Castle 2
222 130 Car 2
333 100 Home 1
333 110 Car 2
config:
ID SignalRec SignalOut RecBy HQ
====================================
111 60 45 101 1
111 40 60 102 1
222 50 60 102 2
222 30 90 101 2
333 80 10 103 1
好的,现在我有一个子查询,在其中我从配置表中选择'SignalRec'和'SignalOut',并在messages表中按ID和日期(上面未包括)匹配它,问题是我需要它匹配messages.RecBy=config.RecBy,但config.RecBy是字符串,但它的等效名称在base表中。因此,我几乎需要在子查询或某种类型的联接中执行子查询,并比较返回值。以下是我到目前为止的情况:
(SELECT TOP 1 config.SignalRec from config WHERE config.ID = messages.ID AND ||I need th other comparison here||...Order By...) As cfgSignalRec,
(SELECT TOP 1 config.SignalOut from config WHERE config.ID = messages.ID AND ||I need th other comparison here||...Order By...) As cfgSignalOut
我试图尽可能清楚地说明这一点,但如果您需要更多信息,请告诉我。我将规范化您的messages表中的RecBy,以引用bases表。如果字符串内容也在基中引用,为什么要在那里插入它 这正是规范化存在的原因:减少冗余、减少歧义和强制引用完整性
为了更清楚地说明这一点,messages表中的RecBy应该是base的外键。我将规范化messages表中的RecBy以引用base表。如果字符串内容也在基中引用,为什么要在那里插入它 这正是规范化存在的原因:减少冗余、减少歧义和强制引用完整性
为了更清楚地说明这一点,messages表中的RecBy应该是base的外键。我认为这可以做到这一点(尽管我没有尝试过…)
但是,正如Anthony所指出的,您可能希望规范化
messages
表中RecBy
列中的字符串,因为base
表中的数据相同。我认为这可以实现这一点(尽管我没有尝试过……)
然而,正如Anthony所指出的,您可能希望规范化
messages
表中RecBy
列中的字符串,因为base
表中的数据相同。根据您的描述,听起来您需要两个连接
SELECT TOP 1
c.SignalRec
FROM
config c
INNER JOIN
bases b
ON c.RecBy = b.NameNum
INNER JOIN
messages m
ON b.Name = m.RecBy
根据您的描述,听起来您需要两个连接
SELECT TOP 1
c.SignalRec
FROM
config c
INNER JOIN
bases b
ON c.RecBy = b.NameNum
INNER JOIN
messages m
ON b.Name = m.RecBy
我想我可能不太清楚我想做什么,对此我很抱歉。 这两个表中的数据实际上是不同的,尽管相关性是相同的。如果不详细说明系统是如何工作的,解释起来有点混乱。
实际上,我找到了一种非常快速的方法。
在我的子查询中,我执行以下操作:
(SELECT TOP 1 config.Signal FROM config,bases
WHERE config.ID = messages.ID AND bases.Name = messages.RecBy AND bases.NameNum =
config.RecBy Order By...)
因此,这本质上比较了不同表的2个RecBy,即使一个是整数,另一个是字符串。它让我想起了一场比赛,并在Excel中查找。我想我可能还不太清楚我想做什么,对此表示抱歉。 这两个表中的数据实际上是不同的,尽管相关性是相同的。如果不详细说明系统是如何工作的,解释起来有点混乱。
实际上,我找到了一种非常快速的方法。
在我的子查询中,我执行以下操作:
(SELECT TOP 1 config.Signal FROM config,bases
WHERE config.ID = messages.ID AND bases.Name = messages.RecBy AND bases.NameNum =
config.RecBy Order By...)
因此,这本质上比较了不同表的2个RecBy,即使一个是整数,另一个是字符串。它让我想起了一场比赛,并在Excel中查找。我也想不出一个好标题。我也想不出一个好标题。我没有能力正常化。我可以在子查询中执行此操作吗?我显示的查询应该可以在不进行规范化的情况下工作。不是吗?你得到了什么错误/意外的结果?我没有责任正常化。我可以在子查询中执行此操作吗?我显示的查询应该可以在不进行规范化的情况下工作。不是吗?您会得到哪些错误/意外结果?