在MySQL(或一般的SQL)中,是否可以生成预定义标识符列表,并与匹配的表数据结合使用?
以下面的表数据为例,我们称之为list1 = ['Alabama', 'Alabama', 'Alabama', 'Alabama', 'Alaska']
list2 = ['Alabama', 'Auburn', 'Florence', 'Jacksonville', 'Alaska']
df = pd.DataFrame(list1, columns=['States'])
df['Region'] = pd.DataFrame(list2)
index_list = df[df['States'] == df['Region']].index.tolist()
df = df.drop(df.index[index_list])
print(df)
:
States Region
1 Alabama Auburn
2 Alabama Florence
3 Alabama Jacksonville
现在,我有一个可能的 States Region
0 Alabama Alabama
1 Alabama Auburn
2 Alabama Florence
3 Alabama Jacksonville
4 Alaska Alaska
5 Alaska Alaska
6 Alaska Alaska
值列表,并希望获得这些值的完整列表,以及上表中的联接数据。使用列表States Region
0 Alabama Alabama
1 Alabama Auburn
2 Alabama Florence
3 Alabama Jacksonville
4 Alaska Alaska
,所需的结果是:
my_table
显然,像id | value
---+------
1 | 'a'
3 | 'c'
这样的查询只会产生两行结果(值'a'和'c')。
对于一个解决方案,我正在考虑某种形式的临时表,用完整的id(id
)列表,然后将其与表数据连接起来,例如
[1, 2, 3, 4]
但我该怎么做?
这甚至可能吗?或者是否真的有必要将结果与外部代码中的初始列表进行比较? (这是可能的,但在我的情况下不是微不足道的,标识符不是整数)
(最终的想法是,我希望数据库中的结果集具有所有输入ID,以便我可以轻松识别不存在的记录)
更新:我想这可以归结为一个问题:如何获得结果集,例如
item | id | value
-----+------+------
1 | 1 | 'a'
2 | NULL | NULL
3 | 3 | 'c'
4 | NULL | NULL
来自(我的)SQL服务器没有将此作为某些表中的数据,但是在某些查询中设置数据?
答案 0 :(得分:0)
一种新方法闪现在我的脑海中......使用union
。
SELECT t1.`item`, t2.`id`, t2.`value`
FROM (
select 1 as `item`
union select 2
union select 3
union select 4
) AS t1
LEFT JOIN `my_table` AS t2 ON t2.`id` = t1.`item`
它回答了这个问题,但这是否是“最好的”还有待观察。回答。只要item
的列表不太长(对我来说就是这种情况),它就可以工作。
任何人都有更好的解决方案吗?