我有一个表,它有一个布尔列,这个列用于过滤一些响应。我需要以元组的形式返回一个响应 {claimed, unclaimed}
(想象一下这张table叫 winnings
)
在处理它时,我做了两个单独的查询返回 claimed
那么 unclaimed
行并手动构造响应,然后返回所有行,而不检查布尔列并在查询外部拆分它。现在我想知道是否有一种方法可以在同一个表上运行一个查询并同时返回这两个查询 claimed
以及 unclaimed
作为单独的结果,主要是为了性能,希望它运行得更好。我尝试过使用联接,但它返回一个包含两个项目的列表,如:
[{claimed, unclaimed}, {claimed, unclaimed}]...
当我想要的时候:
{claimed, unclaimed}
# OR
[{claimed, unclaimed}]
最多,没有更多的元组。请注意,我不是运行原始查询,而是使用库,因此如果术语不正确,请原谅。
这是我运行的最后一个查询:
SELECT w0."claimed", w1."claimed"
FROM "winnings" AS w0
INNER JOIN "winnings" AS w1 ON TRUE
WHERE (w0."claimed" AND NOT (w1."claimed"))
LIMIT 10;
编辑:更多细节。
当我从上面运行查询时,得到的结果是:
=> SELECT w0."claimed", w1."claimed" FROM "winnings" AS w0 INNER JOIN "winnings" AS w1 ON TRUE WHERE (w0."claimed" AND NOT (w1."claimed")) LIMIT 10;
claimed | claimed
---------+---------
t | f
t | f
t | f
t | f
t | f
t | f
t | f
t | f
t | f
t | f
(10 rows)
这是转换成以下关于长生不老药,这是我正在使用的语言:
[
true: false,
true: false,
true: false,
true: false,
true: false,
true: false,
true: false,
true: false,
true: false,
true: false
]
这是一个关键字列表,内部是一个元组列表 [{true, false}, {true, false}]
-我想要: [{[true, true], [false, false]}]
意思是我想要两个列表,每个列表都有各自的行,只在一个列表中声明,在另一个列表中只声明无人声明。
我真的不介意它输出的类型,只要它包括两个列表和它们的行我是怎么说的。
1条答案
按热度按时间vbopmzt11#
要从行列表中获取第一列,可以使用
Enum.map/2
要获取每个元组的第一个元素:如果您是elixir的新手,&语法可能有点混乱。那个代码是
您可以将其转换为一个函数,对所有列执行此操作,如下所示: