Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.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
MS SQL:如何从两个表中进行选择?_Sql_Sql Server_Tsql - Fatal编程技术网

MS SQL:如何从两个表中进行选择?

MS SQL:如何从两个表中进行选择?,sql,sql-server,tsql,Sql,Sql Server,Tsql,我有两张表,一张有ProductID、[英文中的产品名称]和Price。另一个表有ProductID和[西班牙语中的产品名称] 我想要一个select查询,它以西班牙语为我提供产品名称和价格 如何使用MS SQL实现这一点 在数据库设计方面,我是否可以将所有内容放在一个表中,并简化select查询?例如ProductID、NameEnglish、NameSpanish、Price SELECT t2.[Product Name in Spanish], t1.Price FROM tab

我有两张表,一张有ProductID、[英文中的产品名称]和Price。另一个表有ProductID和[西班牙语中的产品名称]

我想要一个select查询,它以西班牙语为我提供产品名称和价格

如何使用MS SQL实现这一点

在数据库设计方面,我是否可以将所有内容放在一个表中,并简化select查询?例如ProductID、NameEnglish、NameSpanish、Price

SELECT t2.[Product Name in Spanish], t1.Price
    FROM table1 t1 -- The English version
        INNER JOIN table2 t2 -- The Spanish version
            ON t1.ProductID = t2.ProductID
至于您的设计问题,请考虑未来的扩展。你会想用另一种语言(比如法语)来储存这个名字吗?您可能最终希望引入一个语言表和一个链接产品和语言的交叉引用表。比如:

至于您的设计问题,请考虑未来的扩展。你会想用另一种语言(比如法语)来储存这个名字吗?您可能最终希望引入一个语言表和一个链接产品和语言的交叉引用表。比如:


组合它们是最佳解决方案,但使用联接将解决您的问题。

组合它们将是最佳解决方案,但使用联接将解决您的问题。

您可以使用联接运算符:

SELECT
  tab2.[Product name in Spanish],
  tab1.Price
FROM
  table1 tab1
INNER JOIN
  table2 tab2 on tab2.ProductID=tab1.ProductID

您可以使用联接运算符:

SELECT
  tab2.[Product name in Spanish],
  tab1.Price
FROM
  table1 tab1
INNER JOIN
  table2 tab2 on tab2.ProductID=tab1.ProductID

您可以使用内部联接来执行此操作,但我看不出有任何理由使用两个单独的表,我会亲自将它们合并。

您可以使用内部联接来执行此操作,但我看不到有任何理由使用两个单独的表,我会亲自将它们合并。

不,不要将它们合并到同一个表中。如果您还需要其他语言的描述和其他内容,可能不仅仅是西班牙语,会发生什么?区域日期格式和货币如何?如果您正朝着多语言的方向发展,请检查为地区设计数据库。不,不要将它们合并到同一个表中。如果您还需要其他语言的描述和其他内容,可能不仅仅是西班牙语,会发生什么?区域日期格式和货币如何?如果您正在朝着多语言的方向发展,请检查为地区设计数据库。使用此设置,您不需要字段EnglishName,因为它将包含在英语语言id的字段翻译中。但这是正确的解决方案。还可以创建一个视图,使表在选择时像1个表一样工作。@t-clausen.dk:当然,这有点非规范化,但我喜欢在产品中保留英文或其他您的母语描述,只是为了给表中的行赋予一些含义。通过这种设置,您不需要字段EnglishName,因为它将包含在英语语言id的字段翻译中。但这是正确的解决方案。还可以创建一个视图,使表在选择时像1个表一样工作。@t-clausen.dk:当然,这有点非规范化,但我喜欢保留英文或其他您的母语描述,以便对表中的行赋予一些含义。
SELECT SP.ProductName, PRODUCT.Price from PRODUCT as PRODUCT 
   JOIN SPANISHPRODUCTS as SP ON PRODUCT.ProductID = SP.ProductID