#sql #sql-server
#sql #sql-сервер
Вопрос:
У меня есть таблица, в которой, в частности, две записи, из которых я ищу различия. В этой таблице достаточно столбцов, и я хотел бы, чтобы в ней отображались только разные. Я хотел бы определить, какие значения столбцов для этих двух записей отличаются. Это —
table_one
|------------------------------------------------------------------------------------------|
| key_id | order_number | serial_code | order_date | idk_more_data_one | idk_more_data_two |
|------------------------------------------------------------------------------------------|
| 0000 | 45576 | f56b22 | 20200101 | 22000 | 99.4 |
| 0001 | 45576 | f56b22 | 20200101 | 23000 | 91.7 |
| 0002 | 45577 | rt1000 | 20200101 | 19500 | 93.3 |
| 0003 | 45577 | rt1000 | 20200101 | 20000 | 93.3 |
| 0004 | 45577 | rt1000 | 20200101 | 19750 | 93.3 |
|------------------------------------------------------------------------------------------|
Мне нужен запрос, который извлекает только key_id
значения 0000
и 0001
, а затем отображает только столбцы key_id
, idk_more_data_one
, и idk_more_data_two
, потому что это единственные столбцы, которые изменились.
Я видел в Интернете, как люди говорили о самосоединениях и тому подобном, но я не думаю, что это то, чего я хочу, или, если это так, я не понимаю, как правильно его использовать здесь, и это была не совсем та же проблема, поэтому я не смог перенести ее напрямую. Я также попробовал что-то очень прямое, например
Select *
From
(Select *
From table_one
Where order_number = '45576')
Where
но не мог понять, что даст мне правильный эффект в Where
части инструкции.
Комментарии:
1. Пожалуйста, укажите в своем вопросе базу данных, которую вы используете: mysql, oracle, sqlserver …?
2. Как мне узнать, какой у меня есть? Я использую его в MS SQL Server Management Studio, означает ли это, что это sqlserver? Рад обновить теги, я просто … не знаю?
3. Вы хотите сравнить только идентификатор ключа 0000 и 0001? или вы хотите сравнить записи для каждого ключа с любыми другими для одного и того же номера заказа?
4. Только эти две, я просто хотел проиллюстрировать, что в таблице больше этих двух, и я выбираю из нее только эти две строки. Прошу прощения, если дополнительная информация была скорее запутанной, чем полезной.
Ответ №1:
Я не совсем уверен, что вы ищете, но если вы пытаетесь выполнить поиск в 2 реестрах по и key_id и в этих 3 полях:
SELECT key_id, idk_more_data_one, idk_more_data_two
FROM table_one
WHERE key_id IN ("0000","0001")
ИЗДАНИЕ ПОСЛЕ КОММЕНТАРИЯ:
То, что вы пытаетесь сделать, это создать пользовательский запрос, вероятно, есть и другие способы сделать это, но я напишу, что я сделал, и надеюсь, это поможет вам.
Прежде всего, вам нужно будет создать и сохранить Procedure (SP) для такого рода запросов, SP должен будет принять по крайней мере один параметр, который будет varchar длиной N (столько, сколько вы считаете возможным) и будет содержать столбцы, которые вы собираетесь запрашивать.
Затем вам нужно будет создать свой запрос в виде строки, в которую вы будете объединять свои параметры:
ALTER/CREATE PROCEDURE sp_whatevername
@columns varchar(200)
AS
BEGIN
@DECLARE Query varchar(500)
SET Query = 'SELECT ' @columns ' FROM tbl_one'
EXEC (Query)
END
Как я уже сказал, это может быть не лучшим подходом из-за использования «EXEC», который в mssql может нанести вред при неправильном использовании, и вы должны быть очень осторожны с тем, что вы разрешаете получать в своей БД, потому что вы откроете там одну большую открытую дверь.
Итак, чтобы добавить оператор where, вам нужно будет сделать то же самое, добавив к нему WHERE
перед statetment
ALTER/CREATE PROCEDURE sp_whatevername
@columns varchar(200),
@where varchar(200)
AS
BEGIN
@DECLARE Query varchar(500)
SET Query = 'SELECT ' @columns ' FROM tbl_one ' @where
EXEC (Query)
END
Комментарии:
1. Проблема в том, что я не знаю, какими будут столбцы idk_more_data_one и idk_more_data_two. Просто чтобы выбросить некоторые числа, есть тридцать столбцов, и, возможно, три из них будут разными … но я не знаю, какие столбцы отличаются. Мне понадобятся некоторые
Select [term dependent on the Where term]
.2. О, теперь я вижу, что есть способ, но это не лучший подход, но, возможно, единственный, который я знаю, и мне приходилось реализовывать один или два раза, я запишу его и дам вам знать (ну, стек будет хаха)