使用表数据连接预定义的,可能不存在的键

时间:2017-01-09 16:45:33

标签: mysql sql join

在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服务器没有将此作为某些表中的数据,但是在某些查询中设置数据?

1 个答案:

答案 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的列表不太长(对我来说就是这种情况),它就可以工作。

任何人都有更好的解决方案吗?