mysql - 具有重复表名的 SELECT 语句

标签 mysql select duplicates

我有两个不同的功能 sql 语句需要组合。

尝试避免 SELECT 语句中出现重复名称,同时仍检索我在 SQL 查询中查找的数据。

第一个较长的查询:

Select USER.USER_NAME, ASSET.NAME AS KACE_ASSET_NAME, FIELD_31, V3.FIELD_VALUE AS CUSTOM_3, FIELD_20 AS BARCODE, FIELD_27 AS SERIAL_NUMBER

FROM ASSET
JOIN USER ON ASSET.OWNER_ID = USER.ID

JOIN ASSET_DATA_5 ON ASSET.ASSET_DATA_ID = ASSET_DATA_5.ID AND ASSET_TYPE_ID = 5


LEFT JOIN USER_FIELD_VALUE V3 ON V3.USER_ID = USER.ID AND V3.FIELD_ID = 3 

LEFT JOIN ASSET ASSET_LOCATION  ON ASSET_LOCATION.ID = ASSET.LOCATION_ID
LEFT JOIN ASSET_ASSOCIATION J21 ON J21.ASSET_ID = ASSET.ID AND J21.ASSET_FIELD_ID=21
LEFT JOIN ASSET A21 ON A21.ID = J21.ASSOCIATED_ASSET_ID
LEFT JOIN ASSET_DATA_1 AD21 ON AD21.ID = A21.ASSET_DATA_ID
WHERE V3.FIELD_VALUE = 'TERMINATED'

第二个较小的查询:

SELECT ASSET.NAME AS CITY 
FROM ASSET_DATA_1 LEFT JOIN ASSET ON ASSET_DATA_1.ID = ASSET.ASSET_DATA_ID AND ASSET.ASSET_TYPE_ID=1

我尽最大努力将两者结合起来:

Select USER.USER_NAME, ASSET.NAME AS KACE_ASSET_NAME, FIELD_31, V3.FIELD_VALUE AS CUSTOM_3, FIELD_20 AS BARCODE, FIELD_27 AS SERIAL_NUMBER, ASSET.NAME as CITY

FROM ASSET
JOIN USER ON ASSET.OWNER_ID = USER.ID

JOIN ASSET_DATA_5 ON ASSET.ASSET_DATA_ID = ASSET_DATA_5.ID AND ASSET_TYPE_ID = 5


LEFT JOIN USER_FIELD_VALUE V3 ON V3.USER_ID = USER.ID AND V3.FIELD_ID = 3 

LEFT JOIN ASSET ASSET_LOCATION  ON ASSET_LOCATION.ID = ASSET.LOCATION_ID
LEFT JOIN ASSET_ASSOCIATION J21 ON J21.ASSET_ID = ASSET.ID AND J21.ASSET_FIELD_ID=21
LEFT JOIN ASSET A21 ON A21.ID = J21.ASSOCIATED_ASSET_ID
LEFT JOIN ASSET_DATA_1 AD21 ON AD21.ID = A21.ASSET_DATA_ID


#IMPORTANT JOIN HERE - NEED TO LINK THIS INFO BACK TO SELECT STATEMENT
LEFT JOIN ASSET ASSET_DATA_1 ON ASSET_DATA_1.ID = ASSET.ASSET_DATA_ID AND ASSET.ASSET_TYPE_ID=1  


WHERE V3.FIELD_VALUE = 'TERMINATED'

因此尝试构建此 SELECT 语句,以便 asset.name 正确链接回此处列出的最后一个 LEFT JOIN。我相信,问题是有两列名为 ASSET.NAME 和两个 ASSET 表。我不确定如何在 SELECT 语句中调用“ASSET_DATA_1”表中的“ASSET.NAME”数据,而不只是获取第一个 Assets 表的副本。 我四处寻找答案,并尝试过诸如括号中的 SELECT 语句和 UNION 命令之类的操作,但这些似乎都不是答案。 SQL 菜鸟,对这个感到有点不知所措。

最佳答案

要删除重复项,请对所有选定的列使用分组依据。

SELECT USER.USER_NAME, ASSET.NAME AS KACE_ASSET_NAME, FIELD_31, V3.FIELD_VALUE AS CUSTOM_3, FIELD_20 AS BARCODE, FIELD_27 AS SERIAL_NUMBER
FROM ASSET
JOIN USER ON ASSET.OWNER_ID = USER.ID
JOIN ASSET_DATA_5 ON ASSET.ASSET_DATA_ID = ASSET_DATA_5.ID AND ASSET_TYPE_ID = 5
LEFT JOIN USER_FIELD_VALUE V3 ON V3.USER_ID = USER.ID AND V3.FIELD_ID = 3 
LEFT JOIN ASSET ASSET_LOCATION  ON ASSET_LOCATION.ID = ASSET.LOCATION_ID
LEFT JOIN ASSET_ASSOCIATION J21 ON J21.ASSET_ID = ASSET.ID AND J21.ASSET_FIELD_ID=21
LEFT JOIN ASSET A21 ON A21.ID = J21.ASSOCIATED_ASSET_ID
LEFT JOIN ASSET_DATA_1 AD21 ON AD21.ID = A21.ASSET_DATA_ID
WHERE V3.FIELD_VALUE = 'TERMINATED'
GROUP BY USER.USER_NAME, ASSET.NAME, FIELD_31, V3.FIELD_VALUE, FIELD_20, FIELD_27;

关于mysql - 具有重复表名的 SELECT 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49016811/

相关文章:

excel - 删除重复项并保留最上面的值

javascript - 使用 vanilla JS 删除 ES5 及以下版本数组中的重复数字的最快方法是什么?

R,有条件地删除重复的行

mysql - 使用触发器更新后跟踪表行中的更改并将更改的列名和值写入另一个表

php - 在我的数据库中检索记录的逻辑? MySQL PHP

php - SQL SELECT id WHERE 电子邮件相同

sql - 如何使用一个 select 语句的结果作为另一个 select 语句的列?

php - 如何处理 Laravel Eloquent "WHERE"Query with slash on the value? (拉拉维尔 5.3)

c# - 从数据库 Linq 获取最小值和最大值到 MVC 中的 Sql 查询?

mysql - 映射列的记录名称的更简单方法?