【问题标题】:SQL Query to select records based on 2 different values in the same field and a conditionSQL查询根据同一字段中的2个不同值和一个条件选择记录
【发布时间】:2012-01-22 21:47:17
【问题描述】:

我为印度铁路项目创建了一个这样的表:

CREATE TABLE IF NOT EXISTS `dennis` (
  `trid` varchar(50) NOT NULL,
  `place` varchar(50) NOT NULL,
  `si` varchar(50) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

然后我以这种方式插入行:

INSERT INTO `dennis` (`trid`, `place`, `si`) VALUES
('100', 'cochi', '3'),
('300', 'cochi', '1'),
('100', 'mumbai', '1'),
('100', 'bangalore', '2'),
('300', 'bangalore', '2'),
('300', 'mumbai', '3'),
('200', 'hyderabad', '1'),
('400', 'trivandrum', '1'),
('200', 'bangalore', '2'),
('200', 'trivandrum', '3'),
('400', 'bangalore', '2'),
('400', 'hyderabad', '3');

我的问题是,当我选择作为班加罗尔的起点站和作为孟买的目的地时,我得到了所有的火车号码,因为班加罗尔存在于所有 trid 即 trainid 但孟买仅存在于 100 和 300。

我需要一个查询,该查询只能返回同时拥有孟买和班加罗尔的三元组。此外,班加罗尔的 si 即序列号必须小于孟买的 si。

我使用了这个查询,但它似乎返回了所有记录

SELECT DISTINCT trid FROM dennis WHERE place ='mumbai' OR place='bangalore'

【问题讨论】:

  • 您的架构没有意义。什么是 trid,什么是 si,什么是 dennis?

标签: mysql sql select


【解决方案1】:

试试这个,

SELECT DISTINCT d1.trid 
FROM dennis d1
     INNER JOIN dennis d2 ON d2.trid=d1.trid
WHERE d1.place = 'bangalore' and d2.place = 'mumbai' AND d1.si < d2.si

希望这能回答你的问题

【讨论】:

  • 太棒了!!请将其中一个答案标记为正确,以便以后的用户可以轻松找到答案。
【解决方案2】:
SELECT d1.trid 
FROM dennis d1
INNER JOIN dennis d2 ON d2.trid=d1.trid
WHERE d1.place = 'bangalore' and d2.place = 'mumbai'

【讨论】:

  • @user1104168 你知道在线输入全部大写是非常不礼貌的吗?
  • 其实我很高兴很抱歉打了大写字母,没有伤害到。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多