2013-04-10 5 views
0

я хочу сказатьКак я могу выбрать поле и проверить его с собой?

select col1,col2,col3 
from table1 
    inner join table2 on table1.col1=table2.col1 
         and ..... (? ) 

? : Я хочу только 1 запись или первую запись из таблицы1, соединенную с первой записью из таблицы2. но команда вызывает все присоединенные записи, к которым можно присоединиться. например если 2 записи в table1, что col1 = 1432 и только 1 запись в table2 существует, что col1 = 1432 команда присоединилась все. но я хочу присоединиться только к первому из таблицы1 с первого из таблицы2

Я хочу отобразить все записи, которые содержат более 1 записи.

+1

Вы не можете создать структуру своего стола? –

+0

Думаю, вам нужно «group by» на 'col1', а затем подумайте, что именно вы хотите показать в' col2' и 'col3'. Если вам нужно показать первую запись для каждой группы, вы можете посмотреть на этот вопрос: http://stackoverflow.com/questions/3800551/sql-select-first-row-in-each-group-by-group –

+0

его нет, когда я использую группу. потому что он соединен с внутренним соединением. –

ответ

0

я хочу только 1 запись или первая запись из table1 вместе с первой записи из table2

Здесь вы идете:

select top 1 col1,col2,col3 
from table1 
    inner join table2 on table1.col1=table2.col1 
         and ..... 
+0

Я хочу выбрать всю запись моей таблицы. это всего лишь 1 запись! –

+0

Можете ли вы дать структуру своего стола? может быть добавить SQL Fiddle, и перефразировать ваш вопрос, пожалуйста? Я не думаю, что понял все правильно! –

0

Попробуйте этот запрос -

SELECT * 
FROM dbo.table1 t1 
JOIN (
SELECT TOP 1 * 
FROM dbo.table2 
) t2 ON t1.col1 = t2.col1 
0

Если вы находитесь на SQL Server 2005 или выше, вы можете попробовать ranking function, чтобы захватить только первую запись из каждой группы:

select * 
from (
     select a.col1 
      , a.col2 
      , a.col3 
      -- Use the order by to determine which rows will be ranked first for each group 
      , row_number() over (partition by a.col1 order by a.col2) as rownum 
     from table1 as a 
      join table2 as b on a.col1 = b.col1 
    ) as q 
where rownum = 1 -- Only get the first row of each group 

я хочу, чтобы отобразить все записи, которые более чем 1 запись будет присоединиться.

Вы можете добавить это к вашему где п:

and exists (
     select col1 
     from table1 
     where col1 = q.col1 
     group by col1 
     having count(*) > 1   
    ) 

Чтобы предложить другое решение, которое не использует ранжирования функции, я думаю, мы должны были бы знать больше о ваших таблицах, особенно уникальных ключей и как вы определяете первую запись каждой группы.

+0

извините. im работает с sql 2000. –

+0

Итак, пожалуйста, предоставьте дополнительную информацию о ваших таблицах, таких как ключи и как определить «первую» строку каждой группы. –

+0

У меня есть две таблицы :: table1: col1, col2, col3: key, col4, col5; table2: col1, col2, col3, col4: key, col5, col6, col7; col1 из таблицы1 и cole1 из таблицы2 предназначены для соединения. в col1 данных таблицы 1 может быть Duplicate и в col1 таблицы2 тоже.в таблице 1 col1, col2 должен быть одинаковым table2 col1, col2; но может быть двумя записями каждой из таблиц одинаковых данных! поэтому я хочу выбрать каждую запись из таблицы1 только с ОДНОЙ записью таблицы2. И другая запись может быть указана из каждой таблицы –