Sql 将一张桌子连在一起
是否有更好的方法编写此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
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。。。是的,我不是在主键上加入的。但是桌子已经整理好了,不客气。如果您认为它解决了您的问题,请将此标记为答案:)