Как присоединиться к двум таблицам вместе с тем же количеством строк согласно их порядку

Я не смог заставить JSONobject работать, поэтому в итоге я использовал GSON, например:

String json = gson.toJson(commsMsg);
JSONObject obj = new JSONObject(json);

Я использовал очень полезный GNROK для подключения к localhost, который работал очень хорошо. Я следовал этому уроку, который работал очень хорошо.

 https://hackernoon.com/using-ngrok-with-azure-functions-7e209e96538c
7
задан Cade Roux 14 May 2009 в 21:40
поделиться

8 ответов

в 2000 году вам придется либо запустить 2 курсора только вперед и вставить их во временную таблицу. или вставьте значения во временную таблицу с дополнительным столбцом идентификаторов и объедините 2 временные таблицы в поле идентификаторов

2
ответ дан 6 December 2019 в 14:09
поделиться

Если ваши таблицы не две большие, вы можете создать две временные таблицы в памяти и выбрать в них свой контент в определенном порядке, а затем соединить их в строке Number.

например,

CREATE TABLE #Temp_One (
    [RowNum] [int] IDENTITY (1, 1) NOT NULL ,
    [Description] [nvarchar] (50) NOT NULL
)

CREATE TABLE #Temp_Two (
    [RowNum] [int] IDENTITY (1, 1) NOT NULL ,
    [Description] [nvarchar] (50) NOT NULL
)

INSERT INTO #Temp_One
SELECT Your_Column FROM Your_Table_One ORDER BY Whatever

INSERT INTO #Temp_Two
SELECT Your_Column FROM Your_Table_Two ORDER BY Whatever

SELECT * 
FROM #Temp_One a 
    LEFT OUTER JOIN #Temp_Two b 
         On a.RowNum = b.RowNum
2
ответ дан 6 December 2019 в 14:09
поделиться

Это НЕ возможно, так как нет абсолютно никакой гарантии относительно порядка, в котором будут выбраны строки.

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

Принуждение выполнять такие запросы сильно пахнет плохим дизайном базы данных.

7
ответ дан 6 December 2019 в 14:09
поделиться

Есть ли у вас что-нибудь, что гарантирует упорядочение каждой таблицы?

Насколько я знаю, SQL-сервер не дает никаких обещаний по упорядочению набора результатов, если внешний запрос не имеет порядка по пункту. В вашем случае вам нужно, чтобы каждая таблица была упорядочена детерминированным образом, чтобы это работало.

Кроме этого, в SQL 2000, как я уже отвечал ранее, временная таблица и два курсора кажутся хорошим ответом.

Обновить: Кто-то упомянул о вставке обеих таблиц во временные таблицы и о том, что это даст лучшую производительность. Я не эксперт по SQL, поэтому я полагаюсь на тех, кто знает об этом, и, поскольку у меня было право голоса, я подумал, что вам следует изучить эти соображения производительности. Но в любом случае, если у вас нет какой-либо другой информации в ваших таблицах, чем то, что вы нам показали, я не уверен, что вы сможете осуществить ее в порядке заказа.

2
ответ дан 6 December 2019 в 14:09
поделиться

Рассмотрите возможность использования ранга (rownum в Oracle) для динамического применения упорядоченных уникальных чисел к каждой таблице. Просто присоединяйтесь к колонке рангов, и вы должны иметь то, что вам нужно. См. Эту статью Microsoft о нумерации строк .

0
ответ дан 6 December 2019 в 14:09
поделиться

Вы можете изменить обе таблицы, чтобы иметь столбец auto_increment, а затем присоединиться к нему.

Как уже говорили другие, в SQL нет внутреннего порядка; таблица строк является набором. Любой заказ, который вы получаете, является произвольным, , если вы не добавите заказ к предложению .

Так что да, есть способы, которые вы можете сделать, но все они зависят от случайного заказа быть тем, на что вы надеетесь. Так что сделайте это один раз, и не делайте это снова, если вы не можете придумать способ (auto_increments, натуральные ключи, что-то) для обеспечения порядка.

1
ответ дан 6 December 2019 в 14:09
поделиться

было бы лучше использовать row_number (), но это только для 2005 и 2008, это должно работать на 2000 ...

Попробуйте это:

create table table1 (name varchar(30))
insert into table1 (name) values ('cat')
insert into table1 (name) values ('dog')
insert into table1 (name) values ('mouse')

create table table2 (cost int)
insert into table2 (cost) values (23)
insert into table2 (cost) values (13)
insert into table2 (cost) values (25)

Select IDENTITY(int,1,1) AS RowNumber
, Name
INTO #Temp1
from table1


Select IDENTITY(int,1,1) AS RowNumber
, Cost
INTO #Temp2
from table2

select * from #Temp1
select * from #Temp2

SELECT
    t1.Name, t2.Cost
    FROM #Temp1                 t1
        LEFT OUTER JOIN #Temp2  t2 ON t1.RowNumber=t2.RowNumber
    ORDER BY t1.RowNumber
0
ответ дан 6 December 2019 в 14:09
поделиться

Xynth - встроенная нумерация строк недоступна, к сожалению, до SQL2K5, а пример, приведенный Microsoft, на самом деле использует треугольные объединения - ужасный скрытый удар по производительности, если таблицы становятся большими. Моим предпочтительным подходом будет вставка в пару временных таблиц с использованием функции идентификации, а затем соединение с ними, что, по сути, уже дает тот же ответ. Я думаю, что подход с двумя курсорами звучит намного тяжелее, чем нужно для этой задачи.

0
ответ дан 6 December 2019 в 14:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: