Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.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_Join_Subquery - Fatal编程技术网

在SQL中,如何查询三个不同的表,并在其他表为空时找到具有值的表

在SQL中,如何查询三个不同的表,并在其他表为空时找到具有值的表,sql,sql-server,join,subquery,Sql,Sql Server,Join,Subquery,大家好,我想知道是否有人能帮我解决SQL问题。我们有一个包含所有打印机及其相关设置的数据库。由于我们有三代打印机,设置被放置在不同的表中,通过序列号链接到主表。由于不同意命名约定,每个设置也会有不同的名称。例如,我正在查看开始设置 表1-dbo.Base 包含所有打印机序列和gen 1设置的主表 表2-dbo.RioPro360 第2代打印机设置通过串行连接 表3-dbo.HelicalData 第3代打印机设置通过串行连接 每个表都使用序列号作为唯一ID 作为测试查询,我可以运行以下命令

大家好,我想知道是否有人能帮我解决SQL问题。我们有一个包含所有打印机及其相关设置的数据库。由于我们有三代打印机,设置被放置在不同的表中,通过序列号链接到主表。由于不同意命名约定,每个设置也会有不同的名称。例如,我正在查看开始设置

表1-dbo.Base 包含所有打印机序列和gen 1设置的主表

表2-dbo.RioPro360 第2代打印机设置通过串行连接

表3-dbo.HelicalData 第3代打印机设置通过串行连接

每个表都使用序列号作为唯一ID

作为测试查询,我可以运行以下命令

    SELECT
    LTRIM(RTRIM(UPPER(a.SerialNo))) AS [ID],
    LTRIM(RTRIM(UPPER(a.SerialNo))) AS [Name],
    ISNULL(LTRIM(RTRIM(a.ImageStart)),'NULL') AS [Start A],
    ISNULL(LTRIM(RTRIM(b.PrintImageStart)),'NULL') [Start B],
    ISNULL(LTRIM(RTRIM(c.TransferStartOffset)),'NULL') AS [Start C]
FROM SAP_RIOTANGO.dbo.Base AS a
LEFT JOIN SAP_RIOTANGO.dbo.RioPro360 AS b ON b.IdPrinterSerial = a.SerialNo
LEFT JOIN SAP_RIOTANGO.dbo.HelicalData AS c ON c.printerSerial = a.SerialNo
WHERE a.SerialNo = '73F3939' OR  a.SerialNo = '66717401' OR  a.SerialNo = '58905701'
结果

+----------+----------+---------+--------+---------+
|    ID    |  SERIAL  | START A | STAR B | START C |
+----------+----------+---------+--------+---------+
| 66717401 | 66717401 | NULL    | 1200   | NULL    |
| 73F3939  | 73F3939  | -115    | NULL   | NULL    |
| 58905701 | 58905701 | NULL    | NULL   | 21      |
+----------+----------+---------+--------+---------+
+----------+----------+-------+
|    ID    |  SERIAL  | START |
+----------+----------+-------+
| 66717401 | 66717401 |  1200 |
| 73F3939  | 73F3939  |  -115 |
| 58905701 | 58905701 |    21 |
+----------+----------+-------+
这将从具有值的表中为每个打印机提供开始设置。我需要做的是把开头合并成一列

要求的结果

+----------+----------+---------+--------+---------+
|    ID    |  SERIAL  | START A | STAR B | START C |
+----------+----------+---------+--------+---------+
| 66717401 | 66717401 | NULL    | 1200   | NULL    |
| 73F3939  | 73F3939  | -115    | NULL   | NULL    |
| 58905701 | 58905701 | NULL    | NULL   | 21      |
+----------+----------+---------+--------+---------+
+----------+----------+-------+
|    ID    |  SERIAL  | START |
+----------+----------+-------+
| 66717401 | 66717401 |  1200 |
| 73F3939  | 73F3939  |  -115 |
| 58905701 | 58905701 |    21 |
+----------+----------+-------+
我正在考虑创建一个临时表,并在字段为空但无法使其工作时运行一个子查询,如果有人能帮助我使其返回我想要的内容,我就犹豫了

只需使用
COALESCE()

只需使用
COALESCE()


您是否理解在查询中使用字符串NULL与在应用程序(如SSM)中如何显示实际NULL值之间的区别?使用字符串NULL可能会导致隐式转换,从而导致错误。像这样使用isnull时要小心。为什么要修剪列中的值?特别是如果这些值看起来是数字?了解您的数据类型,避免隐式转换,不要为数据库引擎创建不必要的工作。嗨,斯莫尔,我向设计数据库的开发人员提出了与trims和NULL值完全相同的问题,但刚刚被告知我们需要它。TRIMS在那里,因为生产线入口点过去在字符串前后放置了空格字段不是数字,因为序列是字母数字值的集合只是我测试的三个示例都是数字您了解在查询中使用字符串NULL与实际NULL之间的区别吗值是否显示在应用程序中(如SSM)?使用字符串NULL可能会导致隐式转换,从而导致错误。像这样使用isnull时要小心。为什么要修剪列中的值?特别是如果这些值看起来是数字?了解您的数据类型,避免隐式转换,不要为数据库引擎创建不必要的工作。嗨,斯莫尔,我向设计数据库的开发人员提出了与trims和NULL值完全相同的问题,但刚刚被告知我们需要它。TRIMS就在那里,因为生产线入口点过去在字符串前后都放置了空格字段不是数字,因为序列是字母数字值的集合只是我测试的三个示例都是数字Hanks@Gordon Linoff这很好,但是现在在获取最新记录方面有问题,但是为此创建一个新问题感谢@Gordon Linoff这很好,但现在在获取最新记录方面遇到问题,但将为此创建一个新问题