Я знаю, почему из-за этой ошибки, но я не знаю, как ее исправить. вот такая ситуация: У меня есть стол А, который имеет следующие столбцы userID
, switch
, plateType
, groupVal
, brokeage
. userID
, plateType
и groupVal
представляют собой уникальный ключ. groupVal
и userId
могут принимать разные значения, но plateType
просто может иметь 4 (A, B, C, D). Пример записи для одного userId
и один groupVal
будет:Нарушение кардинальности: 1242 Подзапрос возвращает более 1 строки
Userid-------plateType------ groupVal------- brokeage
UserA--------- A----- ------------ 3--------------- 5.5
UserA--------- B----- ------------ 3--------------- 7.6
UserA--------- C----- ------------ 3--------------- 2.1
UserA--------- D----- ------------ 3--------------- 3.5
Так что, когда я запускаю следующий запрос, если это записи не существует, то будет создан, но если они существуют, они должны быть обновлены , но эта ошибка, что я получаю: нарушение
Cardinality: 1242 подзапрос возвращает более чем на 1 строку
Insert into tableA (userID, plateType, groupVal, brokeage)
Select 'UserB', plateType, groupVal, brokeage from tableA
where userID = 'UserA'
on duplicate key
Update brokeage = (Select brokeage from tableA where userID = 'UserA')
Я знаю, что это в подзапросе, выбранном, который я использую в обновлении ... так что мне действительно нужно выбрать из tableA
записей, где userId = UserA
, но которые соответствуют groupVal
и plateTypes
, которые должны быть обновлены UserB
. Надеюсь, я дам себе понять, и кто-то может дать ответ.
Проблема с этим подходом заключается в том, что он обновляется, но все с одинаковым значением. Пример, если userA имеет 3.5 нарушения в таблоType D, все строки UserB в brpokeage будут принимать это значение. – emc
перечитывая свой вопрос, вам вообще не нужен подзапрос, см. Мое редактирование. – doublesharp