选择除某些PostgreSQL以外的所有列

时间:2018-08-21 11:21:21

标签: sql postgresql

我必须比较表,但是有些列我不需要比较,我只知道它们(不是我必须比较的列),所以我想从表中选择所有列,除了那些我不需要的列不需要比较。

我想到了类似的东西

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

有人知道这个查询有什么问题吗?

3 个答案:

答案 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)