使用另一个表的oid删除重复记录

时间:2015-09-08 03:10:36

标签: sql database postgresql duplicate-removal

    public class Window extends JFrame {

    JPanel p = new JPanel();
    JLabel lbl = new JLabel("Enter the number if you have seen it before, Else empty.");
    JLabel res = new JLabel("....");
    static JTextField ans = new JTextField(10);
    Board board = new Board();

    public Window() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        add(board, BorderLayout.CENTER);
        p.setLayout(new BorderLayout(8, 8));
        p.add(lbl, BorderLayout.WEST);
        ans.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                if (ans.getText().equals(Board.num)) {
                    res.setText("Good");
                } else {
                    res.setText("Bad");
                }
                ans.setText("");
                board.repaint();
            }

        });
        p.add(ans, BorderLayout.CENTER);
        p.add(res, BorderLayout.EAST);
        p.setBorder(new EmptyBorder(10, 10, 10, 10));
        this.add(p, BorderLayout.SOUTH);
        setResizable(false);
        pack();
        setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new Window();
            }
        });
    }

}

Table 1 Table 2 -------- -------- oid oid (J) sequence trip_id stop trip_update_id (J)

(J) = joinTable 1同时从api更新30秒。

在每天结束时Table 2已经填充了98%的重复数据,这是因为数据Feed包括过去30秒内生成的新数据和之前Feed中生成的所有数据天。结果Table 1充满了大部分重复数据(oid在插入时自动生成,因此所有oid都是唯一的。)

Table 1包含所有唯一记录,因此我的问题是将Table 2转换为Table 1中每个trip_id的所有唯一记录的SQL。

1 个答案:

答案 0 :(得分:0)

我不太确定我是否理解问题所在,但这里有一些建议。

使用在table2中找不到trip_update_id值从table1中删除行:

delete from table1
    where trip_update_id not in (select trip_id from table2 where trip_id is not null)

(如果允许trip_id具有NULL值,is not null部分非常重要!!!)

要复制从表1中删除trip_update_id行,请保留具有最高oid的行:

delete from table1
   where oid not in (select max(oid) from table1
                     group by trip_update_id)