我在查询数据时遇到问题。这是我的表格:
CREATE TABLE `A` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`myString` varchar(10) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
CREATE TABLE `B` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`myStringId1` int(10) NOT NULL,
`myStringId2` int(10) NOT NULL,
`value` varchar(10) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `index1` (`myStringId1`),
KEY `index2` (`myStringId2`),
CONSTRAINT `fk_B2` FOREIGN KEY (`myStringId2`) REFERENCES `A` (`id`),
CONSTRAINT `fk_B1` FOREIGN KEY (`myStringId1`) REFERENCES `A` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
其中 myStringId1 和 myStringId2 对表A具有外键约束( id )
好的,让我通过查询澄清我想要实现的目标: 让我们假设给定表的一些值:
TABLE A:
ROW1: 22, "foo"
ROW2: 33, "bar"
TABLE B:
ROW1: 1, 22, 33, "true"
ROW2: 2, 22, 22, "false"
现在我需要的是一个查询,我给String“foo”并从加入两个表得到以下结果:
RESULT:
ROW1: "foo","bar", "true"
ROW2: "foo", "foo", "false"
给定字符串“bar”我希望如此:
结果: ROW1:“foo”,“bar”,“true”
任何想法?
答案 0 :(得分:0)
在阅读您的评论后,我认为这更接近您的需求:
SELECT a1.myString as myString1, a2.myString as myString2, b.value
FROM `B` b
JOIN `A` a1 on a1.id = b.myStringId1
JOIN `A` a2 on a2.id = b.myStringId2
WHERE a1.myString = 'SOME STRING' OR a2.myString = 'SOME STRING'
这两个联接将确保b.myStringId1
和b.myStringId2
都是TABLE A
的现有密钥,WHERE
确保这两个字符串中的一个是您需要的密钥