Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在需要条件的上下文中指定的非布尔类型的表达式-在内部联接上_Sql_Sql Server_Tsql - Fatal编程技术网

Sql 在需要条件的上下文中指定的非布尔类型的表达式-在内部联接上

Sql 在需要条件的上下文中指定的非布尔类型的表达式-在内部联接上,sql,sql-server,tsql,Sql,Sql Server,Tsql,我正在尝试使用内部联接从多个表中获取数据。我尝试了多种解决方案,但无法找到根本原因 注意:Admin.Table\u Study和Admin.Table\u组合框在UID上有PK-FK关系。在SQL Server中,内部连接没有(。)括号,它在子句上有一个: 例如,您有两个内部JOINs,但只有一个ON子句,因此剩余的JOINs期望ON子句: SELECT study.Name, study.Type, study.Weight, study.Height, study.Age, me

我正在尝试使用内部联接从多个表中获取数据。我尝试了多种解决方案,但无法找到根本原因


注意:Admin.Table\u Study和Admin.Table\u组合框在UID上有PK-FK关系。

在SQL Server中,
内部连接没有
括号,它在
子句上有一个

例如,您有两个
内部JOIN
s,但只有一个
ON
子句,因此剩余的
JOIN
s期望
ON
子句:

SELECT 
    study.Name, study.Type, study.Weight, study.Height, study.Age, measurement.*, ssf.*
from 
    Admin.Table_Study as study
INNER JOIN 
    (Admin.Table_Data as measurement
INNER JOIN
    Admin.Table_ComboBox as ssf)
ON
    study.UID = ssf.UID
where
    measurement.IsMeasurement = 1
编辑:如果
[Admin]。表\u数据
与您可以使用的其他表没有连接

SELECT study.Name, study.Type, study.Weight, study.Height, study.Age, measurement.*, ssf.*
FROM [Admin].Table_Study AS study INNER JOIN 
     [Admin].Table_Data AS measurement
     ON measurement.col = study.col INNER JOIN
     [Admin].Table_ComboBox AS ssf
     ON study.UID = ssf.UID;

内部联接
需要一个
上的
,需要一个条件才能联接

SELECT study.Name, study.Type, study.Weight, study.Height, study.Age
FROM [Admin].Table_Study AS study INNER JOIN
     [Admin].Table_ComboBox AS ssf
     ON study.UID = ssf.UID;
UNION ALL
SELECT NULL, NULL,  NULL, NULL,  NULL, COL1, COL2
FROM [Admin].Table_Data AS td

在您的查询中,定义了加入研究和SSF的方式。但如何将测量和ssf结合起来还没有定义。 此外,您不定义如何加入度量

如果按以下方式编写,可以大大简化此查询,但需要指定缺少的联接条件:

SELECT 
    study.Name, study.Type, study.Weight, study.Height, study.Age, measurement.*, ssf.*
from 
    Admin.Table_Study as study INNER JOIN Admin.Table_Data as measurement
      ON study.ID = measurement.ID -- that what  you miss
    INNER JOIN Admin.Table_ComboBox as ssf
      ON study.UID = ssf.UID
where
    measurement.IsMeasurement = 1

请检查这个表达式。在Sql server中,不需要在联接中提供()

SELECT 
    study.Name, study.Type, study.Weight, study.Height, study.Age, measurement.*, ssf.*
from 
    Admin.Table_Study as study

INNER JOIN 
    Admin.Table_Data as measurement
ON *********************    

INNER JOIN
    Admin.Table_ComboBox as ssf
ON
    study.UID = ssf.UID

where
    measurement.IsMeasurement = 1

Admin.Table_数据与其他任何表都没有任何连接,这就是我跳过的原因。那样的话我该怎么办

听起来你想要的是交叉连接。这也被称为笛卡尔连接(但这不是SQL选择的名称),您可以将左表中的每一行连接到右表中的每一行:

SELECT 
    study.Name, study.Type, study.Weight, study.Height, study.Age, measurement.*, ssf.*
from 
    Admin.Table_Study as study
INNER JOIN 
    Admin.Table_Data as measurement
ON 
    study.ID = measurement.ID   --******this is what you missed
INNER JOIN
    Admin.Table_ComboBox as ssf
ON
    study.UID = ssf.UID
where
    measurement.IsMeasurement = 1

因为它是
all
CROSS-JOIN
没有
ON
子句。

为什么用括号?每个联接都需要一个ON。
内部联接(Admin.Table\u数据作为度量值
没有
ON
子句(和奇数括号)。Admin.Table\u数据与任何其他表都没有任何连接,这就是我跳过的原因。在这种情况下,我该怎么办?[Admin].Table_数据与其他任何表都没有任何关联,这就是我跳过的原因。在这种情况下,你建议我怎么做?@Mirza…使用
UNION ALL
而不是
JOIN
。你只需从我的答案中复制代码,并在其中添加额外的
***
。我还没有看到你的代码。我给出了自己的答复。谢谢你的更新它似乎更“根据需要”。它的工作正是我想要的。再次感谢!
SELECT 
    study.Name, study.Type, study.Weight, study.Height, study.Age, measurement.*, ssf.*
from 
    Admin.Table_Study as study
CROSS JOIN 
    Admin.Table_Data as measurement
INNER JOIN
    Admin.Table_ComboBox as ssf
ON
    study.UID = ssf.UID
where
    measurement.IsMeasurement = 1