簡體   English   中英

從兩個表中選擇相同的列值

[英]Selecting same column values from two tables

我正在struts上做一個項目,在其中我想比較兩個表的行值,並希望獲得匹配的列作為結果集,而我想從結果集中不取出匹配的列。 我正在執行以下編碼,但我總是將3作為columnNumber。 請幫助我獲得確切的結果。

public class ResultDAO {


 public int correctAnswer() throws Exception {

     int columnsNumber=0;

     Connection con=null;       
     PreparedStatement pstmt = null;

     ResultSet rs = null;
     String query="SELECT DISTINCT q1,q2,q3 FROM test WHERE (q1,q2,q3)  IN (SELECT q1,q2,q3 FROM result)ORDER BY q1,q2,q3 ASC";
     try {

         con=DatabaseConnection.getConnection();

         pstmt = con.prepareStatement(query);

         rs = pstmt.executeQuery();

         ResultSetMetaData rsmd = (ResultSetMetaData) rs.getMetaData();

         columnsNumber = rsmd.getColumnCount();
         System.out.println(columnsNumber);


    } 
     catch (Exception e) {
         System.out.println("exception in DAO");
    }
    return columnsNumber;


 }
}

表1 :測試

列:id,q1,q2,q3值:1,A,C,C

表2 :結果

列:id,q1,q2,q3值:1,A,B,C

我正在使用此代碼,但將值獲取為null

公共類ResultDAO {

 public String correctAnswer() throws Exception {

     String columnsNumber = null;

     Connection con=null;       
     PreparedStatement pstmt = null;

     ResultSet rs = null;
     String query="SELECT test.id,IF (test.q1 = result.q1, test.q1, NULL) as q1,IF (test.q2 = result.q2, test.q2, NULL) as q2,IF (test.q3 = result.q3, test.q3, NULL) as q3,(test.q1 = result.q1) + (test.q2 = result.q2) + (test.q3 = result.q3) as matchedColumns FROM test INNER JOIN result USING (id) ORDER BY q1,q2,q3";
     try {

         con=DatabaseConnection.getConnection();

         pstmt = con.prepareStatement(query);

         rs = pstmt.executeQuery();

         System.out.println(rs.next());
         while(rs.next()){
        columnsNumber=rs.getString("matchedColumns");


         }
         System.out.println(columnsNumber);


    } 
     catch (Exception e) {
         System.out.println("exception in DAO");
    }
    return columnsNumber;


 }

}

請嘗試此sqlFiddle

SELECT test.id,
       IF (test.q1 = result.q1, test.q1, NULL) as q1,
       IF (test.q2 = result.q2, test.q2, NULL) as q2,
       IF (test.q3 = result.q3, test.q3, NULL) as q3,
       (test.q1 = result.q1) + (test.q2 = result.q2) + (test.q3 = result.q3) as matchedColumns
FROM test
INNER JOIN result
USING (id)
ORDER BY q1,q2,q3

編輯:要獲取不匹配的列,只需將=符號更改為!=然后添加另一個名為unmatchedColumns sqlFiddle的已創建列

SELECT test.id,
       IF (test.q1 = result.q1, test.q1, NULL) as q1,
       IF (test.q2 = result.q2, test.q2, NULL) as q2,
       IF (test.q3 = result.q3, test.q3, NULL) as q3,
       (test.q1 = result.q1) + (test.q2 = result.q2) + (test.q3 = result.q3) as matchedColumns,
       (test.q1 != result.q1) + (test.q2 != result.q2) + (test.q3 != result.q3) as unmatchedColumns
FROM test
INNER JOIN result
USING (id)
ORDER BY q1,q2,q3

我假設id是結果表中的外鍵

 select tst.id,tst.q1,tst.q2,tst.q3,
    r.id,r.q1,r.q2,r.q3
     from test as tst
    LEFT JOIN result AS r
    ON tst.id = r.id

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM