mysql - 根据两个单独表中的条件从一个表中选择行

标签 mysql database

我已经尝试使用连接和其中语句进行以下操作,但我要么因为运行时间太长而超时,要么收到重复的列名称错误。

我有 3 个表: 甲、乙、丙 我想根据 B 和 C 中的约束创建一个由 A 中的行组成的表。因此 A 中的行必须满足 B 或 C 中的条件:

(A.ID = B.ID 且 A.PURCHASE = B.PURCHASE)或(A.ID = C.ID 且 A.PURCHASE = C.PURCHASE)。

我已经使用 mysql 大约一周了,这是我得到的最接近的(它挂起):

CREATE TABLE D
SELECT T1.* 
FROM TABLE A AS T1, TABLE B AS T2, TABLE B AS T3
JOIN T2, T3 ON ((T1.CUSTOMER_ID = T2.CUSTOMER_ID AND T1.DAY_ID = 
T2.DAY_ID) OR (T1.CUSTOMER_ID = T3.CUSTOMER_ID AND T1.DAY_ID = T2.DAY_ID));

感谢您的帮助!

最佳答案

使用LEFT JOIN将A、B和C连接在一起,然后保留A中在B或C中发生匹配的记录。

INSERT INTO D
SELECT DISTINCT a.*      -- remove duplicate records
FROM tableA a
LEFT JOIN tableB b
    ON a.CUSTOMER_ID = b.CUSTOMER_ID AND a.DAY_ID = b.DAY_ID
LEFT JOIN tableC c
    ON a.CUSTOMER_ID = c.CUSTOMER_ID AND a.DAY_ID = c.DAY_ID
WHERE b.CUSTOMER_ID IS NOT NULL OR    -- retain records where either
      c.CUSTOMER_ID IS NOT NULL       -- condition matches

如果尚未创建 D 表,则使用与表 A 相同的定义来创建它。

关于mysql - 根据两个单独表中的条件从一个表中选择行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40064138/

相关文章:

objective-c - iPhone 应用程序中的数据库连接

c# - 如何使用Datagridview绑定(bind)源C#更新SQL Server数据库

mysql - 数据库设计-两个相等对象的属性

mysql通过比较两个关系来选择行总和

javascript - 更新/添加数据到 Google 电子表格数据库

java - Android链接PHP到MySQL以登录应用程序

ruby-on-rails - 在 rails 中将部分 pg 数据库条目作为 JSON 返回

用于加权投票的 MySQL 查询 - 如何使用分配给不同列的值进行计算

java - 将 jTable 与 MySQL 数据库连接时,java net beans IDE 8.0 中出现数组越界异常

mysql - 从具有多列和一行的表创建具有少列和多行的 View