gpt4 book ai didi

mysql - 仅当列值等于 "joined_table1.id"或 "joined_table2.id"时如何获取行?

转载 作者:行者123 更新时间:2023-11-29 23:22:39 24 4
gpt4 key购买 nike

我有 2 个不同的 table ,用于存放不同类型的产品,例如手机电视。这两个表都有一个 PK。

我还提供了目录功能,其中单个目录可能包含多台电视和多部手机。在 catalog_items.idItem 列中,我存储添加到目录中的项目的 PK(但不存储其类型)。

我的问题是,如何通过仅知道连接三个表的 ID 来检索两个产品表中至少一个中存在该项目的所有 catalog_items 行?

可视化:

电视:

  1. ID
  2. 姓名

电话:

  1. ID
  2. 姓名

catalog_items:

  1. ID
  2. idItem(可能包含来自 tvs.id 或 Phones.id 的 ID,但也可能是完全不同的产品;我想排除包含除电视和手机之外的其他产品 ID 的行)

最佳答案

首先,您确定两个表中没有重复的键值吗? IOW,表 tv.id 不能存在于 Phones.tv 中。

SELECT 
a.id as cat_id,
b.id as tv_id,
b.name as tv_name,
c.id as phone_id,
c.name as phone_name
FROM catalog_items a
LEFT JOIN tvs b
ON a.iditem = b.id
LEFT JOIN
ON a.iditem = c.id
WHERE NOT(b.id IS NULL) AND NOT(c.id IS NULL)

这不是存储数据的最佳方式,也不是检索数据的最有效方式。将所有产品放在一张表中会更好。

一种替代方法是创建一个联合产品表的 View ,然后在简单的两个表内部联接中使用该 View 。这将允许您按产品表中的任何字段对结果进行排序。

关于mysql - 仅当列值等于 "joined_table1.id"或 "joined_table2.id"时如何获取行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27194679/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com