我有一张桌子叫notifications
:
CREATE TABLE `notifications` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`user_id` int(11) DEFAULT NULL,
`type` varchar(20) NOT NULL DEFAULT '',
`parent_id` int(11) DEFAULT NULL,
`parent_type` varchar(15) DEFAULT NULL,
`type_id` int(11) DEFAULT NULL,
`etc` NULL
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=25 DEFAULT CHARSET=utf8;
每个notification
都与一个不同的表相关,parent_type
field的值指定了我要用于* join
该表的表的名称。所有目标表都有几个相似的列:
CREATE TABLE `tablename` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`is_visible` tinyint(1) NOT NULL,
`etc` NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
当前,我正在使用此查询来选择通知,通知它们在目标表中存在相关行,并且其is_visible
字段为1
:
SELECT n.id,
FROM notifications n
LEFT JOIN books b ON n.parent_id = b.id AND n.parent_type = 'book' AND b.is_visible = 1
LEFT JOIN interviews i ON n.parent_id = i.id AND n.parent_type = 'interview' AND i.is_visible = 1
LEFT JOIN other tables...
WHERE n.user_id = 1
GROUP BY n.id
但是由于它是a LEFT JOIN
,如果它与任何表都不匹配,它将返回通知,我该如何重写它,以便它不返回与目标表中的任何行都不匹配的通知?我也尝试了CASE
不成功的声明。
我不是100%肯定语法正确,并且现在没有机会对其进行测试,但是这个想法应该很清楚。
SELECT DISTINCT n.id
FROM notifications n
JOIN (
(SELECT b.id, 'book' AS type FROM books b WHERE b.is_visible = 1)
UNION
(SELECT i.id, 'interview' AS type FROM interviews i WHERE i.is_visible = 1)
) ids ON n.parent_id = ids.id AND n.parent_type = ids.type
WHERE n.user_id = 1
问题内容: 我有交易数据框。每行代表两个项目的交易(可想而知,就像两张事件票之类的交易一样)。我想根据售出的数量重复每一行。 这是示例代码: 这将产生一个看起来像这样的数据框 因此,在上述情况下,每一行将转换为两个重复的行。如果“数量”列为3,则该行将转换为三个重复的行。 问题答案: 首先,我使用整数而不是文本重新创建了您的数据。我还更改了数量,以便可以更轻松地理解问题。 我通过使用嵌套列表理解结
我有一个表,它有4列()gender具有与每个客户链接的唯一值:、或。 该部门与每种产品(男性或女性)都有独特的价值 我做了一个复杂的过程。首先,使用客户信息将male和其他客户分开(创建了两个表CUST_MALEY和cust_other) 如果CUST_MALEY表中有客户,则使用join,返回men division products行(其中division='men');如果cust_oth
如何在中按不同的值获取行? 例如,我有下面的数据框: 我想根据 中的唯一值获取行: 那么,我怎样才能得到呢?如果有人可以提供任何帮助,我将不胜感激。
我有以下表在PostgreSQL 11. 我想得到具有col1,col2,col3和col4的不同值的行,如果col1,col2,col3相同,则取col1的第一个值。 期望的输出是: 我试着回答以下问题。 如何将输出限制为每col2,col3.获得一个col1值。。例如,选择col1值:3876,不包括3924。
问题内容: 我有一张桌子和一张桌子。 该表具有以下结构: 所有用户( 投诉者 和 投诉解决者) 都位于table中。 如何编写查询以显示两列的用户名? 这给了我一个: 但我不知道如何编写,因此两列均显示用户名而不是ID。 问题答案:
有没有办法通过两个列表< code>join两个< code > Spark data frame 具有不同的列名? 我知道如果他们在列表中有相同的名字,我可以做以下事情: 或者,如果我知道不同的列名,我可以这样做: 由于我的方法需要2个列表的输入,这些列表指定哪些列将用于每个DF的,因此我想知道Scala Spark是否有办法做到这一点? 页(page的缩写)我在寻找类似python的东西< c