Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.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_Join - Fatal编程技术网

Sql 将一张桌子连在一起

Sql 将一张桌子连在一起,sql,join,Sql,Join,是否有更好的方法编写此SQL查询 SELECT *, (SELECT TOP 1 columnB FROM mytable WHERE mytable.columnC = T1.columnC ORDER BY columnD) as firstRecordOfColumnB FROM (SELECT * FROM mytable WHERE columnA = 'apple') as T1 请注意,columnC不是主键。在性能方面,这可能会更好: SELECT *, (T

是否有更好的方法编写此SQL查询

SELECT *,  (SELECT TOP 1 columnB FROM mytable WHERE mytable.columnC = T1.columnC ORDER BY columnD) as firstRecordOfColumnB
FROM
    (SELECT * FROM mytable WHERE columnA = 'apple') as T1

请注意,columnC不是主键。

在性能方面,这可能会更好:

SELECT
  *,
  (TOP 1 myLookupTable.columnB FROM mytable AS myLookupTable WHERE myLookupTable.keyColumn = mytable.keyColumn) as firstRecordOfColumnB
FROM
  mytable
WHERE
  columnA = 'apple'
但是对于前1部分,我不知道有什么更好的解决方案

编辑: 如果keyColumn是唯一的,则firstRecordOfColumnB中的数据将与mytable.columnB中的数据相同。 如果不是唯一的,至少您需要对该数据进行排序,以获得相关的前1名,例如:

SELECT
  *,
  (TOP 1 myLookupTable.columnB FROM mytable AS myLookupTable WHERE myLookupTable.keyColumn = mytable.keyColumn
   ORDER BY myLookupTable.sortColumn) as firstRecordOfColumnB
FROM
  mytable
WHERE
  columnA = 'apple'

如果keyColumns确实是一个键列(即唯一的),那么查询肯定可以更优雅、更高效地编写

SELECT
  *, columnB
FROM
  mytable
WHERE
  columnA = 'apple'

您的连接条件没有做任何有用的事情,因为它是同一个表中的同一个字段,除非它是非唯一列,否则您基本上只是选择一个随机行返回。你确定这就是你的意思吗?我把它命名为keyColumn是错误的。我有一个表,其中有许多记录的columnC值相同。我想返回一个特定的行加上第一条记录中的一些列,这些列的值与columnC的值相同。只要不定义order by,就没有“first”记录。获得“第一张”唱片背后的确切想法是什么?需要它做什么?好的。我编辑了查询以获得订单依据。我对第一行中存储的数据感兴趣,这些行的columnC值相同。columnB将是*的一部分,我猜?如果您不希望columnB出现在末尾,您可以简单地写:*不,对不起,将其命名为keyColumn是一个错误。它不是主键。thx。我不知道我可以这样使用:选择。。。从mytable中选择myLookupTable。。。是的,我不是在主键上加入的。但是桌子已经整理好了,不客气。如果您认为它解决了您的问题,请将此标记为答案:)