Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql SQL两个表需要根据联合中的列组从任一表返回值_Mysql_Sql_Ms Access - Fatal编程技术网

Mysql SQL两个表需要根据联合中的列组从任一表返回值

Mysql SQL两个表需要根据联合中的列组从任一表返回值,mysql,sql,ms-access,Mysql,Sql,Ms Access,我有两张桌子;tblORIG拥有所有数据,tblNEW拥有一些更新的数据,这些数据仍在等待批准,因此我无法合并或更新 我想返回tblNEW行,但如果没有新结果,我想返回tblORIG行 我创建了一个联合ALL作为FROM子查询,并将tblORIG的秩设为2,新的秩设为1。起初我觉得很完美,我只需要选择我的字段和一个最小值(排名)。这不起作用,因为字段有时不同,Group By返回所有内容 当前项目适用于MSAccess(叹气),但我想知道access、MySQL或Oracle中的答案 下面是一些

我有两张桌子;tblORIG拥有所有数据,tblNEW拥有一些更新的数据,这些数据仍在等待批准,因此我无法合并或更新

我想返回tblNEW行,但如果没有新结果,我想返回tblORIG行

我创建了一个联合ALL作为FROM子查询,并将tblORIG的秩设为2,新的秩设为1。起初我觉得很完美,我只需要选择我的字段和一个最小值(排名)。这不起作用,因为字段有时不同,Group By返回所有内容

当前项目适用于MSAccess(叹气),但我想知道access、MySQL或Oracle中的答案

下面是一些简化的代码来解释这个问题

SELECT U_TBL.NAME1, U_TBL.NAME2, MIN(RANK_VAL)
FROM 
(SELECT tblORIG.NAME1, tblORIG.NAME2, 2 AS RANK_VAL FROM tblORIG
 UNION ALL
 SELECT tblNEW.NAME1, tblNEW.NAME2, 1 AS RANK_VAL FROM tblNEW) AS U_TBL
GROUP BY U_TBL.NAME1, U_TBL.NAME2
我不能使用
分组依据
,因为每个表中的名称1和名称2彼此不同。他们有账号,是的,他们是一样的tblNEW将始终在tblORIG中有记录,但tblORIG有时只在tblNEW中有记录

我也会采纳一些关于这个问题更好的标题的建议

试试这个:

SELECT tblNEW.NAME1, tblNEW.NAME2, 1 AS RANK_VAL FROM tblNEW
UNION ALL
SELECT tblORIG.NAME1, tblORIG.NAME2, 2 AS RANK_VAL 
FROM tblORIG
WHERE NOT EXISTS (SELECT 1 FROM tblNEW WHERE NAME1 = tblORIG.NAME1 AND NAME2 = tblORIG.NAME2)

这应该适用于MySQL。不确定访问权限。

您对MIN的想法是正确的,但这需要通过一个子选择来完成。比如:

SELECT
    *
FROM
(
    SELECT ID, 1 AS Rank FROM A
    UNION ALL
    SELECT ID, 2 AS Rank FROM B
) AllItems
JOIN
(
    SELECT
        ID,
        MIN(Rank) AS MinRank
    FROM
    (
        SELECT ID, 1 AS Rank FROM A
        UNION ALL
        SELECT ID, 2 AS Rank FROM B
    ) Ranks
    GROUP BY
        Ranks.ID
) LowestItems
    ON AllItems.ID = LowestItems.ID
    AND AllItems.Rank = LowestItems.Rank

希望您能将其应用于您的具体情况。

我认为您需要使用外部联接将两个表联接在一起。然后你可以使用coalesce(或者你选择的任何平台,我认为在Access中你可以使用
NZ
)。类似于
selectcoalesce(tblNew.col1,tblOld.col1)。。。从tableOld左侧外部联接tableNew on…
。主键是什么?帐户ID?@PederRice是的,两个表都有ID。我猜它会被称为ORIG.KUNNR和NEW.KUNNR。是的,这是SAP数据。如果表格是新的,它也是旧的。新表正在清理旧数据。该项目是这样的,我可以让其他团队对其进行验证。从
和AllItems.Rank=lowsitems.Rank
和AllItems.Rank=lowsitems.MinRank
的小修改让它开始工作。这并不快,但这比什么都重要。谢谢你的帮助!我无法使它在Access中工作,但如果我在更好的DB系统中遇到此问题,我会将此方法放在手边。非常感谢。