SQL: Как найти значение дескриптора из одной таблицы, которая связана с другой? - PullRequest
1 голос
/ 05 ноября 2019

У меня есть две таблицы ( TableA ; TableB ), и мне нужно получить информацию о поиске из TableB, поскольку она относится к записи в TableA.

TableA содержит следующее:

Unique_ID ( Уникальный идентификатор, применяемый к каждой записи в этих базах данных e)

STATE_CODE ( Сокращение состояния, которое являетсяиспользуется в качестве информации в записи: запись может иметь только одно выбранное состояние, но одно и то же состояние может применяться к нескольким записям )

TableB содержит следующее:

STATE_CODE

STATE_NAME

Итак, давайте предположим, что это выглядит так:

Таблица A :

| Unique_ID | STATE_CODE |
+-----------+------------+
|     1     |     TX     |
|     2     |     GA     |
|     3     |     TX     |
|     4     |     MS     |

TableB будет выглядеть следующим образом:

| STATE_CODE | STATE_NAME  |
+------------+-------------+
|    TX      |   Texas     |
|    GA      |  Georgia    |
|    MS      | Mississippi |

Мне нужно, чтобы мой оператор select извлекал STATE_NAME (например, "Texas") из TableB на основе STATE_CODE, который применяется к Unique_ID в TableA.

Я знаю, что мне нужно связать STATE_CODE с Unique_ID, а затем STATE_NAME с этим конкретным STATE_COD. Э, но у меня проблемы с моим заявлением. Это тянет название штата, но повторяет его снова и снова в результатах, иначе: Техас; Техас; Техас. Я думаю, что это повторяется один раз каждый раз, когда отдельная запись (Unique_ID) была отредактирована / обновлена. Как сделать так, чтобы он отображался только один раз?

Мой оператор SQL довольно прост, потому что я пишу и запускаю его через графический интерфейс базы данных, а не что-то вроде SSMS или MySQL. Так что куча JOIN и WHERE не работают через GUI.

SELECT STATE_NAME 
from dbo.TableB b
     , dbo.TableA a 
where b.STATE_CODE = a.STATE_CODE 
and a.Unique_ID = {Unique_ID}

Я ожидаю, что на выходе будет просто сказать "Техас", а вместо этого будет написано "Техас; Техас; Техас"

Я из Техаса, и даже не хочу повторять это снова и снова.

1 Ответ

0 голосов
/ 06 ноября 2019

Это решит проблему:

SELECT STATE_NAME 
from TableB b
     , TableA a 
where b.STATE_CODE = a.STATE_CODE 
and a.Unique_ID = 1
GROUP BY STATE_NAME

Вот это DEMO

Но, пожалуйста, обратите внимание:

В вашемВопрос, который вы дали нам две таблицы и некоторые данные. Когда мы проверяем ваш запрос с этими данными, он возвращает «Техас» только один раз, потому что в Таблице A вы дали нам два разных значения для столбца Unique_ID для TX. В моей первой демонстрации, которую вы видите выше, я изменил это для теста.

Если это не так (из-за группировки по и вашего GUI), попробуйте это:

SELECT MAX(STATE_NAME)
from TableB b
     , TableA a 
where b.STATE_CODE = a.STATE_CODE 
and a.Unique_ID = 1

Или, может быть, это:

SELECT STATE_NAME
from TableB b
     , TableA a 
where b.STATE_CODE = a.STATE_CODE 
and a.Unique_ID = 1
limit 1
...