我必须比较表,但是有些列我不需要比较,我只知道它们(不是我必须比较的列),所以我想从表中选择所有列,除了那些我不需要的列不需要比较。
我想到了类似的东西
entryRowMyNewEntrys.CollectionChanged += (s, e) =>
{
switch (e.Action)
{
case NotifyCollectionChangedAction.Add:
MyNewEntry added = e.NewItems?.OfType<MyNewEntry>().FirstOrDefault();
string key = "...";
if (added != null && !dicForMyNewEntrys.ContainsKey(key))
dicForMyNewEntrys.Add(key, added);
break;
case NotifyCollectionChangedAction.Remove:
MyNewEntry removed = e.OldItems?.OfType<MyNewEntry>().FirstOrDefault();
key = "...";
if (removed != null && dicForMyNewEntrys.ContainsKey(key))
dicForMyNewEntrys.Remove(key);
break;
}
};
无论输出是SELECT 'SELECT ' || array_to_string(ARRAY(SELECT 'o' || '.' || c.column_name
FROM information_schema.columns As c
WHERE table_name = 'office'
AND c.column_name NOT IN('id', 'deleted')
), ',') || ' FROM officeAs o' As sqlstmt
而不是没有SELECT * FROM office As o
列的select a,b,c from office
。
有人知道这个查询有什么问题吗?
答案 0 :(得分:3)
这有效:
CREATE TABLE public.office(id INTEGER, a TEXT, b TEXT, deleted BOOLEAN, c TEXT)
然后:
SELECT 'SELECT ' || STRING_AGG('o.' || column_name, ', ') || ' FROM office AS o'
FROM information_schema.columns
WHERE table_name = 'office'
AND table_schema = 'public'
AND column_name NOT IN ('id', 'deleted')
结果:
SELECT o.a, o.b, o.c FROM office AS o
答案 1 :(得分:0)
我不确定这是否有帮助,但是我将查询写为:
SELECT 'SELECT ' || string_agg('o' || '.' || c.column_name, ', ') || ' FROM ' || table_name || ' o' As sqlstmt
FROM information_schema.columns As c
WHERE table_name = 'office' AND
c.column_name NOT IN ('id', 'deleted')
GROUP BY c.table_name;
答案 2 :(得分:0)
万一来自 Rails 世界的任何人碰巧到了这里(就像我一样),使用一个有 10 列的表的例子,你想选择除一列之外的所有列,你可以像这样完成:< /p>
SomeModelName.select(SomeModelName.column_names - ['column_1'])
而不必这样做:
SomeModelName.select(:column_2, :column_3, :column_4, :column_5, :column_6, :column_7, :column_8, :column_9, :column_10)