Доступ к данным с использованием составного ключа - PullRequest
0 голосов
/ 14 июня 2019

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

Я бы подумал, что есть возможность сказать, т.е. select * from tableA where primary_key = something не вдаваясь в подробности, если это один первичный ключ или составной.

MySQL выдает информацию о дубликате составного ключа, объединяя его. Так, например, составной ключ состоит из этих столбцов: (id_company_subsid, id_company, id_subsidiary, company_subsidiary_start), поэтому составной ключ выводится как:

Duplicate entry '92078-2706-6552-2010-12-31' for key 'PRIMARY'

Можно ли построить запрос аналогичным образом? То есть select * from tableA where primary_key = '92078-2706-6552-2010-12-31' и MySQL выяснит, как его использовать? Будет ли он сопоставляться со всеми столбцами из предустановленного составного ключа?

Редактировать / Разъяснение: Решение этой проблемы предназначено для использования в автоматизированном программном обеспечении, в котором таблицы с одинаковой схемой сравниваются друг с другом. Таблицы с различными первичными ключами (некоторые единичные, некоторые составные). Столы приходят такими, какие они есть.

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

Цель состоит в том, чтобы объединить две таблицы по двум столбцам (первичный ключ + столбец хэша), чтобы выявить различия между ними.

Ответы [ 2 ]

0 голосов
/ 27 июня 2019

Согласно @ spencer7593 комментариям к его ответу.Похоже, моя цель не может быть достигнута таким образом.Каждый из столбцов первичных ключей должен быть адресован индивидуально.

@ spencer7593 уточняющий комментарий:

@ Роб: нет, не в контексте запроса MySQL для извлечения строки на основе значения столбцов в первичном ключе, нет- spencer7593 14 июня в 15: 25

0 голосов
/ 14 июня 2019

Просто включите условие в каждый отдельный столбец, что-то вроде этого:

SELECT ....
  FROM t
 WHERE t.fee = '92078'
   AND t.fi  = '2706'
   AND t.fo  = '6552'
   AND t.fum = '2010-12-31'    

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

Мы можем использовать выражения, которые ссылаются на столбцы. Мы могли бы создать выражение как это:

CONCAT(t.fee,'-',t.fi,'-',t.fo,'-',t.fum)

Но мы не хотели бы использовать сравнение равенства для этого выражения в предложении WHERE, потому что это не могло бы эффективно использовать индекс; это заставит MySQL вычислить это выражение для каждой строки в таблице.

...