Mysql 如何连接表?

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

我有三张桌子:

部分:

第四部分:

第三方:

基本上,每个部件都由任意部件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 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 |