Mysql 如何连接表?
我有三张桌子: 部分: 第四部分: 第三方: 基本上,每个部件都由任意部件ID组成。e、 第#1部分的l='foo',p='bar',s='baz' 如果我想搜索所有l='foo'的部分,我就使用这个连接Mysql 如何连接表?,mysql,sql,Mysql,Sql,我有三张桌子: 部分: 第四部分: 第三方: 基本上,每个部件都由任意部件ID组成。e、 第#1部分的l='foo',p='bar',s='baz' 如果我想搜索所有l='foo'的部分,我就使用这个连接 SELECT p.id FROM parts AS p INNER JOIN parts_partid ppi ON ppi.part_id = p.id INNER JOIN partid pi ON ppi.partid_id = pi.id WHERE pi.key = 'l' AND
SELECT p.id FROM parts AS p
INNER JOIN parts_partid ppi ON ppi.part_id = p.id
INNER JOIN partid pi ON ppi.partid_id = pi.id
WHERE pi.key = 'l' AND pi.value = 'foo';
这给了我第一部分和第二部分
现在我想搜索所有具有l='foo'和p='5'的部分(应该只得到部分#2)。我该怎么做?试试这个
SELECT p.id FROM parts AS p
INNER JOIN parts_partid ppi ON ppi.part_id = p.id
INNER JOIN partid pi ON ppi.partid_id = pi.id
WHERE (pi.key = 'l' AND pi.value = 'foo')
or (pi.key ='p' and pi.value = '5')
试试这个:
SELECT id
FROM
(
SELECT
p.id,
MAX(CASE WHEN pi.Key = 'l' THEN value END) AS l,
MAX(CASE WHEN pi.Key = 'p' THEN value END) AS p,
MAX(CASE WHEN pi.Key = 's' THEN value END) AS s
FROM parts AS p
INNER JOIN parts_partid ppi ON ppi.part_id = p.id
INNER JOIN partid pi ON ppi.partid_id = pi.id
GROUP BY p.id
) AS t
WHERE l = 'foo'
AND p = 5;
这将只提供第2部分:
:
| ID |
------
| 2 |
这个查询背后的思想是子查询,它将把键的值旋转到列中;它会将每个id的键作为列标题提供给您:
| ID | L | P | S |
------------------------------
| 1 | foo | bar | baz |
| 2 | foo | 5 | (null) |
| 3 | rrr | (null) | r |
然后在外部查询中,您可以根据这些列的值进行筛选。我认为这不起作用。因为有可能存在一只p=5但l=foo不存在的鹦鹉。我想要两者,但如果我“和”所有的东西都在一起,我就什么也得不到。所以你可以使用“或”操作符。你使用的是什么关系型数据库???@user2210830-那么它对你有用吗?如果是这样,请检查左侧的标记,尝试接受它。
SELECT id
FROM
(
SELECT
p.id,
MAX(CASE WHEN pi.Key = 'l' THEN value END) AS l,
MAX(CASE WHEN pi.Key = 'p' THEN value END) AS p,
MAX(CASE WHEN pi.Key = 's' THEN value END) AS s
FROM parts AS p
INNER JOIN parts_partid ppi ON ppi.part_id = p.id
INNER JOIN partid pi ON ppi.partid_id = pi.id
GROUP BY p.id
) AS t
WHERE l = 'foo'
AND p = 5;
| ID |
------
| 2 |
| ID | L | P | S |
------------------------------
| 1 | foo | bar | baz |
| 2 | foo | 5 | (null) |
| 3 | rrr | (null) | r |