Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.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_Select_Inner Join_Distinct - Fatal编程技术网

Mysql SQL查询-在一列上对另一列的不同值进行不同查询(使用内部联接)

Mysql SQL查询-在一列上对另一列的不同值进行不同查询(使用内部联接),mysql,sql,select,inner-join,distinct,Mysql,Sql,Select,Inner Join,Distinct,我很感激之前有人在这里提出过类似的问题,但到目前为止,我无法在我的代码中实现提供的答案,因为我只想区分一列中的重复项,而另一列保持不变,以及代码中的内部联接。内部连接是有问题的,因为提供的大多数答案都使用分区函数,而且作为SQL的新手,我不知道如何将其与之集成。建议只使用带分区的内部连接将非常有用 虽然我可以用Python进行后期导出(在这里我将使用所需的输出),但这段代码目前输出约200万行,这使得处理和检查非常耗时。代码如下: SELECT client_ip_address, langua

我很感激之前有人在这里提出过类似的问题,但到目前为止,我无法在我的代码中实现提供的答案,因为我只想区分一列中的重复项,而另一列保持不变,以及代码中的内部联接。内部连接是有问题的,因为提供的大多数答案都使用分区函数,而且作为SQL的新手,我不知道如何将其与之集成。建议只使用带分区的内部连接将非常有用

虽然我可以用Python进行后期导出(在这里我将使用所需的输出),但这段代码目前输出约200万行,这使得处理和检查非常耗时。代码如下:

SELECT client_ip_address, language_enum_code
FROM vw_user_session_log AS usl
INNER JOIN vw_user_topic_ownership AS uto
ON usl.user_id = uto.user_id
使用SELECT DISTINCT而不是SELECT可以使我更接近所需的输出,但它不会在后面留下一个重复的行,而是会删除所有的行。建议在保留一个重复行的同时使用此函数。我使用的是与数据库的只读连接,因此,只有当我能够从查询输出中生成一个临时的可查询表时,才会使用DELETE-FROM方法,我认为这是不可能的,而且看起来很笨拙

原始数据样本:

user_id:    client_ip_address:   language_enum_code:          (other stuff...)
    4          194:4:62:18              107
    2          101:9:23:34              14
    3          180:4:87:99              15
    3          194:4:62:18              15
    4          166:1:19:27              107
    2          166:1:19:27              14
预期结果:

user_id:    client_ip_address:   language_enum_code:          (other stuff...)
    4          194:4:62:18              107
    2          101:9:23:34              14
    3          180:4:87:99              15

如您所见,任何id枚举组合都应该被筛选为只出现一次。这不是任何ip枚举组合的原因是,多个用户可以通过相同的ip地址连接。

您只是想要聚合吗

SELECT client_ip_address, GROUP_CONCAT(DISTINCT language_enum_code)
FROM vw_user_session_log usl INNER JOIN
     vw_user_topic_ownership uto
     ON usl.user_id = uto.user_id
GROUP BY client_ip_address;
这将为每个
客户机ip\u地址返回一行,每个语言代码以逗号分隔列表


您还可以使用
MIN()
MAX()
为每个
客户端ip地址
language\u enum\u code
获取任意值

SELECT client_ip_address, GROUP_CONCAT(DISTINCT language_enum_code)
FROM vw_user_session_log usl INNER JOIN
     vw_user_topic_ownership uto
     ON usl.user_id = uto.user_id
GROUP BY client_ip_address;
这将为每个
客户机ip\u地址返回一行,每个语言代码以逗号分隔列表


您还可以使用
MIN()
MAX()
为每个
客户机的
language\u enum\u code
ip\u地址
获取任意值,如果您不关心为每个用户id/enum组合保留哪个ip地址,则应该执行以下操作:

SELECT user_id, min(client_ip_address), language_enum_code
FROM vw_user_session_log AS usl
INNER JOIN vw_user_topic_ownership AS uto
ON usl.user_id = uto.user_id
where client_ip_address is not null
group by user_id, language_enum_code

如果您不关心为每个用户\u id/enum组合保留哪个IP地址,那么类似的操作应该可以:

SELECT user_id, min(client_ip_address), language_enum_code
FROM vw_user_session_log AS usl
INNER JOIN vw_user_topic_ownership AS uto
ON usl.user_id = uto.user_id
where client_ip_address is not null
group by user_id, language_enum_code


请提供原始数据和预期结果的示例,但仍在寻找理想的答案。如果我理解正确,您希望该组合具有唯一的用户id、语言、枚举代码和任意客户端ip地址吗?因为在您的“期望结果”中,您丢弃了数据,例如“166:1:19:27”。您是如何选择保留哪些IP地址和丢弃哪些IP地址的?一旦这些地址被导出,我将通过一个数据库运行IP地址,并将其转换为国家/地区。同一用户不太可能使用来自两个不同国家的应用程序,因此我忽略了最终丢失的IP。我猜您的原始数据不完整。由于您的查询中有2个表,但只显示了1个表数据。请提供原始数据和预期结果的示例,并且仍然在寻找理想的答案。如果我理解正确,您希望该组合具有唯一的用户id、语言枚举代码和任意客户端ip地址吗?因为在您的“期望结果”中,您丢弃了数据,例如“166:1:19:27”。您是如何选择保留哪些IP地址和丢弃哪些IP地址的?一旦这些地址被导出,我将通过一个数据库运行IP地址,并将其转换为国家/地区。同一用户不太可能使用来自两个不同国家的应用程序,因此我忽略了最终丢失的IP。我猜您的原始数据不完整。因为您的查询中有2个表,但只显示了1个表数据。谢谢您的回答。我决定通过Python将其过滤掉,但这是一种有趣的方法,非常有效。谢谢你的回答。我决定通过Python将其过滤掉,但这是一种有趣的方法,它可以工作,但会产生一个新问题。在此筛选器之前,必须筛选出空IP值。我不知道把“where IP!”放在哪里空的声明-如果你能在这里帮助我,这将是答案。完成了,现在就试试看太棒了!你知道为什么吗!=NULL不起作用?这是一个语法问题,有些数据库会接受!=NULL,但因为NULL不是一个值,而是没有任何值,所以不同的数据库对它的处理不同。我刚刚从经验中了解到,如果数据库接受“is not null”语法,这通常是最安全的选择。同样,对于相反的“is null”,这是可行的,但会产生一个新问题。在此筛选器之前,必须筛选出空IP值。我不知道把“where IP!”放在哪里空的声明-如果你能在这里帮助我,这将是答案。完成了,现在就试试看太棒了!你知道为什么吗!=NULL不起作用?这是一个语法问题,有些数据库会接受!=NULL,但因为NULL不是一个值,而是没有任何值,所以不同的数据库对它的处理不同。我刚刚从经验中了解到,如果数据库接受“is not null”语法,这通常是最安全的选择。同样,对于相反的“为空”。