【问题标题】:SQL SELECT id WHERE emails are the sameSQL SELECT id WHERE 电子邮件相同
【发布时间】:2016-04-20 13:45:30
【问题描述】:

我根本不知道这是否可能,但我有两个表,userBasiccarPlateConfidence,在 carPlateConfidence 我想在电子邮件所在的位置插入 userBasic 的 id匹配。

$query .= "INSERT IGNORE INTO userBasic (id_uM, userNameG, userEmailG) values ((SELECT id_uM FROM userMore WHERE userEmailG='$userEmailG'),'$userNameG', '$userEmailG');";

$query .= "INSERT IGNORE INTO carPlateConfidence (emailConfid, id_uB,plateNumber, confidencePlate, plateNumberUn) values ('$userEmailG', (SELECT id_uB FROM userBasic WHERE userEmailG='(SELECT max(emailConfid) FROM carPlateConfidence)'), '$plateNumber','$confidencePlate', '$plateNumberUn');";

如果我有:

用户基础:

id_uM = 555;
userNameG = BlaBla;
userEmailG = blabla@blabla.com

我想在这张桌子上

carPlateConfidence:

emailConfid = blabla@blabla.com;
id_uB = 555
plateNumber = 1111
confidencePlate = 70 
plateNumberUn = 2222

如果电子邮件不匹配:

emailConfid = blabla2@blabla.com;
id_uB = NULL
plateNumber = 1111
confidencePlate = 70
plateNumberUn = 222

P>S>目前我已经试过这个,从userBasic中选择id:

(SELECT id_uB FROM userBasic WHERE userEmailG='(SELECT max(emailConfid) FROM carPlateConfidence)')
carPlateConfidence 中的

id_uB 设置为外键;

表格:

--
-- Table structure for table `carPlateConfidence`
--

DROP TABLE IF EXISTS `carPlateConfidence`;
CREATE TABLE IF NOT EXISTS `carPlateConfidence` (
  `id_cof` int(11) NOT NULL AUTO_INCREMENT,
  `id_uB` int(11) NOT NULL,
  `emailConfid` varchar(50) NOT NULL,
  `plateNumber` varchar(10) NOT NULL,
  `confidencePlate` varchar(10) DEFAULT NULL,
  `plateNumberUn` varchar(10) DEFAULT NULL,
  PRIMARY KEY (`id_cof`),
  KEY `id_uB` (`id_uB`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=7 ;

-- --------------------------------------------------------

--
-- Table structure for table `userBasic`
--

DROP TABLE IF EXISTS `userBasic`;
CREATE TABLE IF NOT EXISTS `userBasic` (
  `id_uB` int(11) NOT NULL AUTO_INCREMENT,
  `id_uM` int(11) NOT NULL,
  `userNameG` varchar(50) NOT NULL,
  `userEmailG` varchar(50) NOT NULL,
  PRIMARY KEY (`id_uB`),
  UNIQUE KEY `userEmailG` (`userEmailG`),
  KEY `id_uM` (`id_uM`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=119 ;

--
-- Constraints for dumped tables
--

--
-- Constraints for table `carPlateConfidence`
--
ALTER TABLE `carPlateConfidence`
  ADD CONSTRAINT `carPlateConfidence_ibfk_1` FOREIGN KEY (`id_uB`) REFERENCES `userBasic` (`id_uB`);

--
-- Constraints for table `userBasic`
--
ALTER TABLE `userBasic`
  ADD CONSTRAINT `userBasic_ibfk_1` FOREIGN KEY (`id_uM`) REFERENCES `userMore` (`id_uM`);

【问题讨论】:

  • 这很容易。你能发布你的表格结构吗?
  • @Bikash P 我添加结构。

标签: php mysql sql database select


【解决方案1】:

所以你想要更新,而不是插入:

UPDATE carPlateConfidence t
SET t.id_uB = (SELECT distinct s.id_uM FROM userBasic s
               WHERE s.userEmailG = t.emailConfid)

这只有在只能有 1 个匹配项时才有效,如果可以有多个匹配项,您应该指定您想要哪个匹配项,如果没关系,请使用 MAX()limit

UPDATE carPlateConfidence t
SET t.id_uB = (SELECT max(s.id_uM) FROM userBasic s
               WHERE s.userEmailG = t.emailConfid)

【讨论】:

  • 或者限制这件事:)
  • 有什么方法可以使用插入?我需要插入新值,而不仅仅是更新表格。
  • 这没有意义,邮件之间怎么会有匹配,同时一条记录不存在???
  • @sagi 一个问题,如果 id_uB 是外来的,我应该放弃约束,更新,添加约束?
猜你喜欢
  • 1970-01-01
  • 2017-07-21
  • 2021-03-04
  • 2022-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多