This is an automated email from the ASF dual-hosted git repository.

duanzhengqiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git


The following commit(s) were added to refs/heads/master by this push:
     new c8485e2  Refactor SELECT_SQL_BY_ID_ACROSS_TWO_SHARDING_TABLES 
statement with shardingsphere-integration-test (#11999)
c8485e2 is described below

commit c8485e2ae8c775911b9d3f07cb9b503e9312984b
Author: liguoping <[email protected]>
AuthorDate: Thu Aug 26 07:57:54 2021 +0800

    Refactor SELECT_SQL_BY_ID_ACROSS_TWO_SHARDING_TABLES statement with 
shardingsphere-integration-test (#11999)
    
    * Refactor SELECT_SQL_BY_ID_ACROSS_TWO_SHARDING_TABLES statement with 
shardingsphere-integration-test in env db
    
    * Refactor SELECT_SQL_BY_ID_ACROSS_TWO_SHARDING_TABLES statement with 
shardingsphere-integration-test in env dbtbl_with_readwrite_splitting
    
    * Refactor SELECT_SQL_BY_ID_ACROSS_TWO_SHARDING_TABLES statement with 
shardingsphere-integration-test in env 
dbtbl_with_readwrite_splitting_and_encrypt
    
    * Refactor SELECT_SQL_BY_ID_ACROSS_TWO_SHARDING_TABLES statement with 
shardingsphere-integration-test in env tbl
    
    * remove SELECT_SQL_BY_ID_ACROSS_TWO_SHARDING_TABLES l
    
    * docker
---
 .../statement/FederatePrepareStatementTest.java    | 29 ----------------------
 .../jdbc/core/statement/FederateStatementTest.java | 27 --------------------
 ...select_sql_by_id_across_two_sharding_tables.xml | 25 +++++++++++++++++++
 ...select_sql_by_id_across_two_sharding_tables.xml | 25 +++++++++++++++++++
 ...select_sql_by_id_across_two_sharding_tables.xml | 25 +++++++++++++++++++
 ...select_sql_by_id_across_two_sharding_tables.xml | 25 +++++++++++++++++++
 .../cases/dql/dql-integration-test-cases.xml       |  8 ++++++
 .../docker/db/h2/proxy/conf/config-db.yaml         | 20 +++++++++++++++
 .../docker/db/mysql/proxy/conf/config-db.yaml      | 20 +++++++++++++++
 .../docker/db/postgresql/proxy/conf/config-db.yaml | 20 +++++++++++++++
 .../config-dbtbl-with-readwrite-splitting.yaml     | 10 ++++++++
 .../config-dbtbl-with-readwrite-splitting.yaml     | 10 ++++++++
 .../config-dbtbl-with-readwrite-splitting.yaml     | 10 ++++++++
 ...dbtbl-with-readwrite-splitting-and-encrypt.yaml | 10 ++++++++
 ...dbtbl-with-readwrite-splitting-and-encrypt.yaml | 10 ++++++++
 ...dbtbl-with-readwrite-splitting-and-encrypt.yaml | 10 ++++++++
 .../docker/tbl/h2/proxy/conf/config-tbl.yaml       | 10 ++++++++
 .../docker/tbl/mysql/proxy/conf/config-tbl.yaml    | 10 ++++++++
 .../tbl/postgresql/proxy/conf/config-tbl.yaml      | 10 ++++++++
 .../src/test/resources/env/db/dataset.xml          | 20 +++++++++++++++
 .../resources/env/db/init-sql/h2/init-db_0.sql     |  4 +++
 .../resources/env/db/init-sql/h2/init-db_1.sql     |  4 +++
 .../test/resources/env/db/init-sql/mysql/init.sql  |  4 +++
 .../test/resources/env/db/init-sql/oracle/init.sql |  4 +++
 .../resources/env/db/init-sql/postgresql/init.sql  |  8 ++++++
 .../resources/env/db/init-sql/sqlserver/init.sql   |  4 +++
 .../src/test/resources/env/db/rules.yaml           | 21 ++++++++++++++++
 .../env/dbtbl_with_readwrite_splitting/dataset.xml | 13 ++++++++++
 .../init-sql/h2/init-read_ds_1.sql                 |  4 +++
 .../init-sql/h2/init-write_ds_1.sql                |  4 +++
 .../init-sql/mysql/init.sql                        |  4 +++
 .../init-sql/oracle/init.sql                       |  4 +++
 .../init-sql/postgresql/init.sql                   |  8 ++++++
 .../init-sql/sqlserver/init.sql                    |  4 +++
 .../env/dbtbl_with_readwrite_splitting/rules.yaml  | 10 ++++++++
 .../dataset.xml                                    | 13 ++++++++++
 .../init-sql/h2/init-encrypt_read_ds_1.sql         |  4 +++
 .../init-sql/h2/init-encrypt_write_ds_1.sql        |  4 +++
 .../init-sql/mysql/init.sql                        |  4 +++
 .../init-sql/oracle/init.sql                       |  4 +++
 .../init-sql/postgresql/init.sql                   |  8 ++++++
 .../init-sql/sqlserver/init.sql                    |  4 +++
 .../rules.yaml                                     | 12 ++++++++-
 .../src/test/resources/env/tbl/dataset.xml         | 11 ++++++++
 .../test/resources/env/tbl/init-sql/h2/init.sql    |  4 +++
 .../test/resources/env/tbl/init-sql/mysql/init.sql |  2 ++
 .../resources/env/tbl/init-sql/oracle/init.sql     |  2 ++
 .../resources/env/tbl/init-sql/postgresql/init.sql |  6 +++++
 .../resources/env/tbl/init-sql/sqlserver/init.sql  |  2 ++
 .../src/test/resources/env/tbl/rules.yaml          | 10 ++++++++
 50 files changed, 467 insertions(+), 57 deletions(-)

diff --git 
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/statement/FederatePrepareStatementTest.java
 
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/statement/FederatePrepareStatementTest.java
index 48dfec9..4a1a74a 100644
--- 
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/statement/FederatePrepareStatementTest.java
+++ 
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/statement/FederatePrepareStatementTest.java
@@ -50,10 +50,6 @@ public final class FederatePrepareStatementTest extends 
AbstractShardingSphereDa
             "select t_user_encrypt_federate_sharding.user_id, 
t_user_encrypt_federate_sharding.pwd, t_user_info.information from 
t_user_encrypt_federate_sharding, t_user_info "
             + "where t_user_encrypt_federate_sharding.user_id = 
t_user_info.user_id and t_user_encrypt_federate_sharding.user_id > ? ";
 
-    private static final String SELECT_SQL_BY_ID_ACROSS_TWO_SHARDING_TABLES =
-            "select o.order_id_sharding, i.order_id from 
t_order_federate_sharding o, t_order_item_federate_sharding i "
-                    + "where o.order_id_sharding = i.item_id and i.order_id > 
?";
-
     @Test
     public void 
assertQueryWithFederateInSingleAndShardingTableWithAliasByExecuteQuery() throws 
SQLException {
         assertQueryWithFederateInSingleAndShardingTableWithAlias(true);
@@ -167,30 +163,5 @@ public final class FederatePrepareStatementTest extends 
AbstractShardingSphereDa
         assertThat(resultSet.getString(3), is("description3"));
         assertFalse(resultSet.next());
     }
-    
-    @Test
-    public void 
assertQueryWithFederateBetweenTwoShardingTablesByExecuteQuery() throws 
SQLException {
-        assertQueryWithFederateBetweenTwoShardingTables(true);
-    }
-    
-    @Test
-    public void assertQueryWithFederateBetweenTwoShardingTablesByExecute() 
throws SQLException {
-        assertQueryWithFederateBetweenTwoShardingTables(false);
-    }
-    
-    private void assertQueryWithFederateBetweenTwoShardingTables(final boolean 
executeQuery) throws SQLException {
-        ShardingSpherePreparedStatement preparedStatement = 
(ShardingSpherePreparedStatement) getShardingSphereDataSource()
-                
.getConnection().prepareStatement(SELECT_SQL_BY_ID_ACROSS_TWO_SHARDING_TABLES);
-        preparedStatement.setInt(1, 10000);
-        ResultSet resultSet = getResultSet(preparedStatement, executeQuery);
-        assertNotNull(resultSet);
-        assertTrue(resultSet.next());
-        assertThat(resultSet.getInt(1), is(1010));
-        assertThat(resultSet.getInt(2), is(10001));
-        assertTrue(resultSet.next());
-        assertThat(resultSet.getInt(1), is(1011));
-        assertThat(resultSet.getInt(2), is(10001));
-        assertFalse(resultSet.next());
-    }
 
 }
diff --git 
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/statement/FederateStatementTest.java
 
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/statement/FederateStatementTest.java
index cb66889..905f98a 100644
--- 
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/statement/FederateStatementTest.java
+++ 
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/statement/FederateStatementTest.java
@@ -53,10 +53,6 @@ public final class FederateStatementTest extends 
AbstractShardingSphereDataSourc
             "select t_user_encrypt_federate_sharding.user_id, 
t_user_encrypt_federate_sharding.pwd, t_user_info.information from 
t_user_encrypt_federate_sharding, t_user_info "
                     + "where t_user_encrypt_federate_sharding.user_id = 
t_user_info.user_id ";
 
-    private static final String SELECT_SQL_BY_ID_ACROSS_TWO_SHARDING_TABLES =
-            "select o.order_id_sharding, i.order_id from 
t_order_federate_sharding o, t_order_item_federate_sharding i "
-                    + "where o.order_id_sharding = i.item_id";
-
     @Test
     public void 
assertQueryWithFederateInSingleAndShardingTableWithAliasByExecuteQuery() throws 
SQLException {
         assertQueryWithFederateInSingleAndShardingTableWithAlias(true);
@@ -205,28 +201,5 @@ public final class FederateStatementTest extends 
AbstractShardingSphereDataSourc
         assertThat(resultSet.getString(3), is("description3"));
         assertFalse(resultSet.next());
     }
-    
-    @Test
-    public void 
assertQueryWithFederateBetweenTwoShardingTablesByExecuteQuery() throws 
SQLException {
-        assertQueryWithFederateBetweenTwoShardingTables(true);   
-    }
-    
-    @Test
-    public void assertQueryWithFederateBetweenTwoShardingTablesByExecute() 
throws SQLException {
-        assertQueryWithFederateBetweenTwoShardingTables(false);
-    }
-    
-    private void assertQueryWithFederateBetweenTwoShardingTables(final boolean 
executeQuery) throws SQLException {
-        ShardingSphereStatement statement = (ShardingSphereStatement) 
getShardingSphereDataSource().getConnection().createStatement();
-        ResultSet resultSet = getResultSet(statement, 
SELECT_SQL_BY_ID_ACROSS_TWO_SHARDING_TABLES, executeQuery);
-        assertNotNull(resultSet);
-        assertTrue(resultSet.next());
-        assertThat(resultSet.getInt(1), is(1010));
-        assertThat(resultSet.getInt(2), is(10001));
-        assertTrue(resultSet.next());
-        assertThat(resultSet.getInt(1), is(1011));
-        assertThat(resultSet.getInt(2), is(10001));
-        assertFalse(resultSet.next());
-    }
 
 }
diff --git 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/cases/dql/dataset/db/select_sql_by_id_across_two_sharding_tables.xml
 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/cases/dql/dataset/db/select_sql_by_id_across_two_sharding_tables.xml
new file mode 100644
index 0000000..7adca2d
--- /dev/null
+++ 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/cases/dql/dataset/db/select_sql_by_id_across_two_sharding_tables.xml
@@ -0,0 +1,25 @@
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one or more
+  ~ contributor license agreements.  See the NOTICE file distributed with
+  ~ this work for additional information regarding copyright ownership.
+  ~ The ASF licenses this file to You under the Apache License, Version 2.0
+  ~ (the "License"); you may not use this file except in compliance with
+  ~ the License.  You may obtain a copy of the License at
+  ~
+  ~     http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  -->
+
+<dataset>
+    <metadata>
+        <column name="order_id_sharding" />
+        <column name="order_id" />
+    </metadata>
+    <row values="1010, 10001" />
+    <row values="1011, 10001" />
+</dataset>
diff --git 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/cases/dql/dataset/dbtbl_with_readwrite_splitting/select_sql_by_id_across_two_sharding_tables.xml
 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/cases/dql/dataset/dbtbl_with_readwrite_splitting/select_sql_by_id_across_two_sharding_tables.xml
new file mode 100644
index 0000000..7adca2d
--- /dev/null
+++ 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/cases/dql/dataset/dbtbl_with_readwrite_splitting/select_sql_by_id_across_two_sharding_tables.xml
@@ -0,0 +1,25 @@
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one or more
+  ~ contributor license agreements.  See the NOTICE file distributed with
+  ~ this work for additional information regarding copyright ownership.
+  ~ The ASF licenses this file to You under the Apache License, Version 2.0
+  ~ (the "License"); you may not use this file except in compliance with
+  ~ the License.  You may obtain a copy of the License at
+  ~
+  ~     http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  -->
+
+<dataset>
+    <metadata>
+        <column name="order_id_sharding" />
+        <column name="order_id" />
+    </metadata>
+    <row values="1010, 10001" />
+    <row values="1011, 10001" />
+</dataset>
diff --git 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/cases/dql/dataset/dbtbl_with_readwrite_splitting_and_encrypt/select_sql_by_id_across_two_sharding_tables.xml
 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/cases/dql/dataset/dbtbl_with_readwrite_splitting_and_encrypt/select_sql_by_id_across_two_sharding_tables.xml
new file mode 100644
index 0000000..7adca2d
--- /dev/null
+++ 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/cases/dql/dataset/dbtbl_with_readwrite_splitting_and_encrypt/select_sql_by_id_across_two_sharding_tables.xml
@@ -0,0 +1,25 @@
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one or more
+  ~ contributor license agreements.  See the NOTICE file distributed with
+  ~ this work for additional information regarding copyright ownership.
+  ~ The ASF licenses this file to You under the Apache License, Version 2.0
+  ~ (the "License"); you may not use this file except in compliance with
+  ~ the License.  You may obtain a copy of the License at
+  ~
+  ~     http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  -->
+
+<dataset>
+    <metadata>
+        <column name="order_id_sharding" />
+        <column name="order_id" />
+    </metadata>
+    <row values="1010, 10001" />
+    <row values="1011, 10001" />
+</dataset>
diff --git 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/cases/dql/dataset/tbl/select_sql_by_id_across_two_sharding_tables.xml
 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/cases/dql/dataset/tbl/select_sql_by_id_across_two_sharding_tables.xml
new file mode 100644
index 0000000..7adca2d
--- /dev/null
+++ 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/cases/dql/dataset/tbl/select_sql_by_id_across_two_sharding_tables.xml
@@ -0,0 +1,25 @@
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one or more
+  ~ contributor license agreements.  See the NOTICE file distributed with
+  ~ this work for additional information regarding copyright ownership.
+  ~ The ASF licenses this file to You under the Apache License, Version 2.0
+  ~ (the "License"); you may not use this file except in compliance with
+  ~ the License.  You may obtain a copy of the License at
+  ~
+  ~     http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  -->
+
+<dataset>
+    <metadata>
+        <column name="order_id_sharding" />
+        <column name="order_id" />
+    </metadata>
+    <row values="1010, 10001" />
+    <row values="1011, 10001" />
+</dataset>
diff --git 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/cases/dql/dql-integration-test-cases.xml
 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/cases/dql/dql-integration-test-cases.xml
index baffa9e..23f1445 100644
--- 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/cases/dql/dql-integration-test-cases.xml
+++ 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/cases/dql/dql-integration-test-cases.xml
@@ -571,5 +571,13 @@
     <test-case sql="SELECT SUM(CRC32(`order_id`)) FROM t_order WHERE order_id 
= ?" db-types="MySQL" scenario-types="db,tbl">
         <assertion parameters="1000:int" 
expected-data-file="select_with_aggregation_function_and_back_quote_for_mysql.xml"
 />
     </test-case>
+
+    <test-case sql="select o.order_id_sharding, i.order_id from 
t_order_federate_sharding o, t_order_item_federate_sharding i where 
o.order_id_sharding = i.item_id" 
scenario-types="db,tbl,dbtbl_with_readwrite_splitting,dbtbl_with_readwrite_splitting_and_encrypt">
+        <assertion 
expected-data-file="select_sql_by_id_across_two_sharding_tables.xml" />
+    </test-case>
+
+    <test-case sql="select o.order_id_sharding, i.order_id from 
t_order_federate_sharding o, t_order_item_federate_sharding i where 
o.order_id_sharding = i.item_id and i.order_id > ?" 
scenario-types="db,tbl,dbtbl_with_readwrite_splitting,dbtbl_with_readwrite_splitting_and_encrypt">
+        <assertion parameters="10000:int" 
expected-data-file="select_sql_by_id_across_two_sharding_tables.xml" />
+    </test-case>
     
 </integration-test-cases>
diff --git 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/docker/db/h2/proxy/conf/config-db.yaml
 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/docker/db/h2/proxy/conf/config-db.yaml
index fcf38f4..542ca75 100644
--- 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/docker/db/h2/proxy/conf/config-db.yaml
+++ 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/docker/db/h2/proxy/conf/config-db.yaml
@@ -133,6 +133,18 @@ rules:
         standard:
           shardingColumn: user_id
           shardingAlgorithmName: standard_test
+    t_order_federate_sharding:
+      actualDataNodes: ds_${0..1}.t_order_federate_sharding
+      databaseStrategy:
+        standard:
+          shardingColumn: order_id_sharding
+          shardingAlgorithmName: db_inline_order_id
+    t_order_item_federate_sharding:
+      actualDataNodes: ds_${0..1}.t_order_item_federate_sharding
+      databaseStrategy:
+        standard:
+          shardingColumn: item_id
+          shardingAlgorithmName: db_inline_item_id
   bindingTables:
     - t_order,t_order_item,t_order_details
   broadcastTables:
@@ -141,6 +153,14 @@ rules:
   shardingAlgorithms:
     standard_test:
       type: STANDARD_TEST
+    db_inline_order_id:
+      type: INLINE
+      props:
+        algorithm-expression: db_${order_id_sharding % 
2}.t_order_federate_sharding
+    db_inline_item_id:
+      type: INLINE
+      props:
+        algorithm-expression: db_${db_inline_item_id % 
2}.t_order_item_federate_sharding
 
   keyGenerators:
       constant:
diff --git 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/docker/db/mysql/proxy/conf/config-db.yaml
 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/docker/db/mysql/proxy/conf/config-db.yaml
index 7c33a8d..ea2d9a5 100644
--- 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/docker/db/mysql/proxy/conf/config-db.yaml
+++ 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/docker/db/mysql/proxy/conf/config-db.yaml
@@ -133,6 +133,18 @@ rules:
         standard:
           shardingColumn: user_id
           shardingAlgorithmName: standard_test
+    t_order_federate_sharding:
+      actualDataNodes: ds_${0..1}.t_order_federate_sharding
+      databaseStrategy:
+        standard:
+          shardingColumn: order_id_sharding
+          shardingAlgorithmName: db_inline_order_id
+    t_order_item_federate_sharding:
+      actualDataNodes: ds_${0..1}.t_order_item_federate_sharding
+      databaseStrategy:
+        standard:
+          shardingColumn: item_id
+          shardingAlgorithmName: db_inline_item_id
   bindingTables:
     - t_order,t_order_item,t_order_details
   broadcastTables:
@@ -141,6 +153,14 @@ rules:
   shardingAlgorithms:
     standard_test:
       type: STANDARD_TEST
+    db_inline_order_id:
+      type: INLINE
+      props:
+        algorithm-expression: db_${order_id_sharding % 
2}.t_order_federate_sharding
+    db_inline_item_id:
+      type: INLINE
+      props:
+        algorithm-expression: db_${db_inline_item_id % 
2}.t_order_item_federate_sharding
 
   keyGenerators:
       constant:
diff --git 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/docker/db/postgresql/proxy/conf/config-db.yaml
 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/docker/db/postgresql/proxy/conf/config-db.yaml
index 69d3c56..670ac60 100644
--- 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/docker/db/postgresql/proxy/conf/config-db.yaml
+++ 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/docker/db/postgresql/proxy/conf/config-db.yaml
@@ -133,6 +133,18 @@ rules:
         standard:
           shardingColumn: user_id
           shardingAlgorithmName: standard_test
+    t_order_federate_sharding:
+      actualDataNodes: ds_${0..1}.t_order_federate_sharding
+      databaseStrategy:
+        standard:
+          shardingColumn: order_id_sharding
+          shardingAlgorithmName: db_inline_order_id
+    t_order_item_federate_sharding:
+      actualDataNodes: ds_${0..1}.t_order_item_federate_sharding
+      databaseStrategy:
+        standard:
+          shardingColumn: item_id
+          shardingAlgorithmName: db_inline_item_id
   bindingTables:
     - t_order,t_order_item,t_order_details
   broadcastTables:
@@ -141,6 +153,14 @@ rules:
   shardingAlgorithms:
     standard_test:
       type: STANDARD_TEST
+    db_inline_order_id:
+      type: INLINE
+      props:
+        algorithm-expression: db_${order_id_sharding % 
2}.t_order_federate_sharding
+    db_inline_item_id:
+      type: INLINE
+      props:
+        algorithm-expression: db_${db_inline_item_id % 
2}.t_order_item_federate_sharding
 
   keyGenerators:
       constant:
diff --git 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/docker/dbtbl_with_readwrite_splitting/h2/proxy/conf/config-dbtbl-with-readwrite-splitting.yaml
 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/docker/dbtbl_with_readwrite_splitting/h2/proxy/conf/config-dbtbl-with-readwrite-splitting.yaml
index f1847e5..9f7e176 100644
--- 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/docker/dbtbl_with_readwrite_splitting/h2/proxy/conf/config-dbtbl-with-readwrite-splitting.yaml
+++ 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/docker/dbtbl_with_readwrite_splitting/h2/proxy/conf/config-dbtbl-with-readwrite-splitting.yaml
@@ -241,6 +241,12 @@ rules:
         standard:
           shardingColumn: item_id
           shardingAlgorithmName: table_inline_item_id
+    t_order_federate_sharding:
+      actualDataNodes: pr_ds_1.t_order_federate_sharding_${0..1}
+      tableStrategy:
+        standard:
+          shardingColumn: order_id_sharding
+          shardingAlgorithmName: table_inline_order_id
   bindingTables:
     - t_order,t_order_item,t_order_details
   broadcastTables:
@@ -253,6 +259,10 @@ rules:
       type: INLINE
       props:
         algorithm-expression: t_order_item_federate_sharding_${item_id % 2}
+    table_inline_order_id:
+      type: INLINE
+      props:
+        algorithm-expression: t_order_federate_sharding_${order_id_sharding % 
2}
 
   keyGenerators:
     constant:
diff --git 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/docker/dbtbl_with_readwrite_splitting/mysql/proxy/conf/config-dbtbl-with-readwrite-splitting.yaml
 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/docker/dbtbl_with_readwrite_splitting/mysql/proxy/conf/config-dbtbl-with-readwrite-splitting.yaml
index f1847e5..9f7e176 100644
--- 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/docker/dbtbl_with_readwrite_splitting/mysql/proxy/conf/config-dbtbl-with-readwrite-splitting.yaml
+++ 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/docker/dbtbl_with_readwrite_splitting/mysql/proxy/conf/config-dbtbl-with-readwrite-splitting.yaml
@@ -241,6 +241,12 @@ rules:
         standard:
           shardingColumn: item_id
           shardingAlgorithmName: table_inline_item_id
+    t_order_federate_sharding:
+      actualDataNodes: pr_ds_1.t_order_federate_sharding_${0..1}
+      tableStrategy:
+        standard:
+          shardingColumn: order_id_sharding
+          shardingAlgorithmName: table_inline_order_id
   bindingTables:
     - t_order,t_order_item,t_order_details
   broadcastTables:
@@ -253,6 +259,10 @@ rules:
       type: INLINE
       props:
         algorithm-expression: t_order_item_federate_sharding_${item_id % 2}
+    table_inline_order_id:
+      type: INLINE
+      props:
+        algorithm-expression: t_order_federate_sharding_${order_id_sharding % 
2}
 
   keyGenerators:
     constant:
diff --git 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/docker/dbtbl_with_readwrite_splitting/postgresql/proxy/conf/config-dbtbl-with-readwrite-splitting.yaml
 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/docker/dbtbl_with_readwrite_splitting/postgresql/proxy/conf/config-dbtbl-with-readwrite-splitting.yaml
index 035d21c..44c5e32 100644
--- 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/docker/dbtbl_with_readwrite_splitting/postgresql/proxy/conf/config-dbtbl-with-readwrite-splitting.yaml
+++ 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/docker/dbtbl_with_readwrite_splitting/postgresql/proxy/conf/config-dbtbl-with-readwrite-splitting.yaml
@@ -241,6 +241,12 @@ rules:
         standard:
           shardingColumn: item_id
           shardingAlgorithmName: table_inline_item_id
+    t_order_federate_sharding:
+      actualDataNodes: pr_ds_1.t_order_federate_sharding_${0..1}
+      tableStrategy:
+        standard:
+          shardingColumn: order_id_sharding
+          shardingAlgorithmName: table_inline_order_id
   bindingTables:
     - t_order,t_order_item,t_order_details
   broadcastTables:
@@ -253,6 +259,10 @@ rules:
       type: INLINE
       props:
         algorithm-expression: t_order_item_federate_sharding_${item_id % 2}
+    table_inline_order_id:
+      type: INLINE
+      props:
+        algorithm-expression: t_order_federate_sharding_${order_id_sharding % 
2}
 
   keyGenerators:
     constant:
diff --git 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/docker/dbtbl_with_readwrite_splitting_and_encrypt/h2/proxy/conf/config-dbtbl-with-readwrite-splitting-and-encrypt.yaml
 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/docker/dbtbl_with_readwrite_splitting_and_encrypt/h2/proxy/conf/config-dbtbl-with-readwrite-splitting-and-encrypt.yaml
index 48e6d09..284a4a5 100644
--- 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/docker/dbtbl_with_readwrite_splitting_and_encrypt/h2/proxy/conf/config-dbtbl-with-readwrite-splitting-and-encrypt.yaml
+++ 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/docker/dbtbl_with_readwrite_splitting_and_encrypt/h2/proxy/conf/config-dbtbl-with-readwrite-splitting-and-encrypt.yaml
@@ -244,6 +244,12 @@ rules:
         standard:
           shardingColumn: item_id
           shardingAlgorithmName: table_inline_item_id
+    t_order_federate_sharding:
+      actualDataNodes: pr_ds_1.t_order_federate_sharding_${0..1}
+      tableStrategy:
+        standard:
+          shardingColumn: order_id_sharding
+          shardingAlgorithmName: table_inline_order_id
   bindingTables:
     - t_user,t_user_item,t_user_details
 
@@ -254,6 +260,10 @@ rules:
       type: INLINE
       props:
         algorithm-expression: t_order_item_federate_sharding_${item_id % 2}
+    table_inline_order_id:
+      type: INLINE
+      props:
+        algorithm-expression: t_order_federate_sharding_${order_id_sharding % 
2}
 
   keyGenerators:
     constant:
diff --git 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/docker/dbtbl_with_readwrite_splitting_and_encrypt/mysql/proxy/conf/config-dbtbl-with-readwrite-splitting-and-encrypt.yaml
 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/docker/dbtbl_with_readwrite_splitting_and_encrypt/mysql/proxy/conf/config-dbtbl-with-readwrite-splitting-and-encrypt.yaml
index 48e6d09..284a4a5 100644
--- 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/docker/dbtbl_with_readwrite_splitting_and_encrypt/mysql/proxy/conf/config-dbtbl-with-readwrite-splitting-and-encrypt.yaml
+++ 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/docker/dbtbl_with_readwrite_splitting_and_encrypt/mysql/proxy/conf/config-dbtbl-with-readwrite-splitting-and-encrypt.yaml
@@ -244,6 +244,12 @@ rules:
         standard:
           shardingColumn: item_id
           shardingAlgorithmName: table_inline_item_id
+    t_order_federate_sharding:
+      actualDataNodes: pr_ds_1.t_order_federate_sharding_${0..1}
+      tableStrategy:
+        standard:
+          shardingColumn: order_id_sharding
+          shardingAlgorithmName: table_inline_order_id
   bindingTables:
     - t_user,t_user_item,t_user_details
 
@@ -254,6 +260,10 @@ rules:
       type: INLINE
       props:
         algorithm-expression: t_order_item_federate_sharding_${item_id % 2}
+    table_inline_order_id:
+      type: INLINE
+      props:
+        algorithm-expression: t_order_federate_sharding_${order_id_sharding % 
2}
 
   keyGenerators:
     constant:
diff --git 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/docker/dbtbl_with_readwrite_splitting_and_encrypt/postgresql/proxy/conf/config-dbtbl-with-readwrite-splitting-and-encrypt.yaml
 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/docker/dbtbl_with_readwrite_splitting_and_encrypt/postgresql/proxy/conf/config-dbtbl-with-readwrite-splitting-and-encrypt.yaml
index 5bd77d8..81adb51 100644
--- 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/docker/dbtbl_with_readwrite_splitting_and_encrypt/postgresql/proxy/conf/config-dbtbl-with-readwrite-splitting-and-encrypt.yaml
+++ 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/docker/dbtbl_with_readwrite_splitting_and_encrypt/postgresql/proxy/conf/config-dbtbl-with-readwrite-splitting-and-encrypt.yaml
@@ -244,6 +244,12 @@ rules:
         standard:
           shardingColumn: item_id
           shardingAlgorithmName: table_inline_item_id
+    t_order_federate_sharding:
+      actualDataNodes: pr_ds_1.t_order_federate_sharding_${0..1}
+      tableStrategy:
+        standard:
+          shardingColumn: order_id_sharding
+          shardingAlgorithmName: table_inline_order_id
   bindingTables:
     - t_user,t_user_item,t_user_details
 
@@ -254,6 +260,10 @@ rules:
       type: INLINE
       props:
         algorithm-expression: t_order_item_federate_sharding_${item_id % 2}
+    table_inline_order_id:
+      type: INLINE
+      props:
+        algorithm-expression: t_order_federate_sharding_${order_id_sharding % 
2}
 
   keyGenerators:
     constant:
diff --git 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/docker/tbl/h2/proxy/conf/config-tbl.yaml
 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/docker/tbl/h2/proxy/conf/config-tbl.yaml
index 7092aa5..3341fa8 100644
--- 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/docker/tbl/h2/proxy/conf/config-tbl.yaml
+++ 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/docker/tbl/h2/proxy/conf/config-tbl.yaml
@@ -58,6 +58,12 @@ rules:
         standard:
           shardingColumn: order_id_sharding
           shardingAlgorithmName: table_inline_order_id
+    t_order_item_federate_sharding:
+      actualDataNodes: tbl.t_order_item_federate_sharding_${0..1}
+      tableStrategy:
+        standard:
+          shardingColumn: item_id
+          shardingAlgorithmName: table_inline_item_id
   bindingTables:
     - t_order,t_order_item,t_order_details
   broadcastTables:
@@ -67,6 +73,10 @@ rules:
   shardingAlgorithms:
     standard_test:
       type: STANDARD_TEST
+    table_inline_item_id:
+      type: INLINE
+      props:
+        algorithm-expression: t_order_item_federate_sharding_${item_id % 2}
     table_inline_order_id:
       type: INLINE
       props:
diff --git 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/docker/tbl/mysql/proxy/conf/config-tbl.yaml
 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/docker/tbl/mysql/proxy/conf/config-tbl.yaml
index 7092aa5..3341fa8 100644
--- 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/docker/tbl/mysql/proxy/conf/config-tbl.yaml
+++ 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/docker/tbl/mysql/proxy/conf/config-tbl.yaml
@@ -58,6 +58,12 @@ rules:
         standard:
           shardingColumn: order_id_sharding
           shardingAlgorithmName: table_inline_order_id
+    t_order_item_federate_sharding:
+      actualDataNodes: tbl.t_order_item_federate_sharding_${0..1}
+      tableStrategy:
+        standard:
+          shardingColumn: item_id
+          shardingAlgorithmName: table_inline_item_id
   bindingTables:
     - t_order,t_order_item,t_order_details
   broadcastTables:
@@ -67,6 +73,10 @@ rules:
   shardingAlgorithms:
     standard_test:
       type: STANDARD_TEST
+    table_inline_item_id:
+      type: INLINE
+      props:
+        algorithm-expression: t_order_item_federate_sharding_${item_id % 2}
     table_inline_order_id:
       type: INLINE
       props:
diff --git 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/docker/tbl/postgresql/proxy/conf/config-tbl.yaml
 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/docker/tbl/postgresql/proxy/conf/config-tbl.yaml
index ae808ac..e21cff1 100644
--- 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/docker/tbl/postgresql/proxy/conf/config-tbl.yaml
+++ 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/docker/tbl/postgresql/proxy/conf/config-tbl.yaml
@@ -58,6 +58,12 @@ rules:
         standard:
           shardingColumn: order_id_sharding
           shardingAlgorithmName: table_inline_order_id
+    t_order_item_federate_sharding:
+      actualDataNodes: tbl.t_order_item_federate_sharding_${0..1}
+      tableStrategy:
+        standard:
+          shardingColumn: item_id
+          shardingAlgorithmName: table_inline_item_id
   bindingTables:
     - t_order,t_order_item,t_order_details
   broadcastTables:
@@ -67,6 +73,10 @@ rules:
   shardingAlgorithms:
     standard_test:
       type: STANDARD_TEST
+    table_inline_item_id:
+      type: INLINE
+      props:
+        algorithm-expression: t_order_item_federate_sharding_${item_id % 2}
     table_inline_order_id:
       type: INLINE
       props:
diff --git 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/db/dataset.xml
 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/db/dataset.xml
index 600d1cc..ad2e787 100644
--- 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/db/dataset.xml
+++ 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/db/dataset.xml
@@ -48,6 +48,18 @@
         <column name="user_id" type="numeric" />
         <column name="status" type="varchar" />
     </metadata>
+    <metadata data-nodes="db_${0..1}.t_order_federate_sharding">
+        <column name="order_id_sharding" type="numeric" />
+        <column name="user_id" type="numeric" />
+        <column name="status" type="varchar" />
+    </metadata>
+    <metadata data-nodes="db_${0..1}.t_order_item_federate_sharding">
+        <column name="item_id" type="numeric" />
+        <column name="order_id" type="numeric" />
+        <column name="user_id" type="numeric" />
+        <column name="status" type="varchar" />
+        <column name="remarks" type="varchar" />
+    </metadata>
     <row data-node="db_0.t_single_table" values="1, 1000, init" />
     <row data-node="db_0.t_single_table" values="2, 1101, init" />
     <row data-node="db_0.t_single_table" values="3, 2300, init" />
@@ -188,4 +200,12 @@
     <row data-node="db_1.t_order_item_federate" values="100001, 1000, 10, 
init" />
     <row data-node="db_1.t_order_item_federate" values="100100, 1001, 10, 
init" />
     <row data-node="db_1.t_order_item_federate" values="100101, 1001, 10, 
init" />
+    <row data-node="db_0.t_order_federate_sharding" values="1010, 10, init" />
+    <row data-node="db_0.t_order_federate_sharding" values="1100, 10, init" />
+    <row data-node="db_1.t_order_federate_sharding" values="1011, 11, init" />
+    <row data-node="db_1.t_order_federate_sharding" values="1101, 11, init" />
+    <row data-node="db_0.t_order_item_federate_sharding" values="1000, 10000, 
10, init, t_order_item_federate_sharding" />
+    <row data-node="db_0.t_order_item_federate_sharding" values="1010, 10001, 
10, init, t_order_item_federate_sharding" />
+    <row data-node="db_1.t_order_item_federate_sharding" values="1001, 10001, 
11, init, t_order_item_federate_sharding" />
+    <row data-node="db_1.t_order_item_federate_sharding" values="1011, 10001, 
10, init, t_order_item_federate_sharding" />
 </dataset>
diff --git 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/db/init-sql/h2/init-db_0.sql
 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/db/init-sql/h2/init-db_0.sql
index 6b4bc7b..3c33df4 100644
--- 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/db/init-sql/h2/init-db_0.sql
+++ 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/db/init-sql/h2/init-db_0.sql
@@ -16,7 +16,11 @@
 --
 
 DROP TABLE IF EXISTS t_order_federate;
+DROP TABLE IF EXISTS t_order_federate_sharding;
+DROP TABLE IF EXISTS t_order_item_federate_sharding;
 DROP TABLE IF EXISTS t_single_table;
 
 CREATE TABLE t_order_federate (order_id INT NOT NULL, user_id INT NOT NULL, 
status VARCHAR(45) NULL, PRIMARY KEY (order_id));
+CREATE TABLE t_order_federate_sharding (order_id_sharding INT NOT NULL, 
user_id INT NOT NULL, status VARCHAR(45) NULL, PRIMARY KEY (order_id_sharding));
+CREATE TABLE t_order_item_federate_sharding (item_id INT NOT NULL, order_id 
INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, remarks 
VARCHAR(45) NULL, PRIMARY KEY (item_id));
 CREATE TABLE t_single_table (single_id INT NOT NULL, id INT NOT NULL, status 
VARCHAR(45) NULL, PRIMARY KEY (single_id));
diff --git 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/db/init-sql/h2/init-db_1.sql
 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/db/init-sql/h2/init-db_1.sql
index 25dda09..eea3635 100644
--- 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/db/init-sql/h2/init-db_1.sql
+++ 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/db/init-sql/h2/init-db_1.sql
@@ -16,5 +16,9 @@
 --
 
 DROP TABLE IF EXISTS t_order_item_federate;
+DROP TABLE IF EXISTS t_order_federate_sharding;
+DROP TABLE IF EXISTS t_order_item_federate_sharding;
 
 CREATE TABLE t_order_item_federate (item_id INT NOT NULL, order_id INT NOT 
NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, PRIMARY KEY (item_id));
+CREATE TABLE t_order_federate_sharding (order_id_sharding INT NOT NULL, 
user_id INT NOT NULL, status VARCHAR(45) NULL, PRIMARY KEY (order_id_sharding));
+CREATE TABLE t_order_item_federate_sharding (item_id INT NOT NULL, order_id 
INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, remarks 
VARCHAR(45) NULL, PRIMARY KEY (item_id));
diff --git 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/db/init-sql/mysql/init.sql
 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/db/init-sql/mysql/init.sql
index 35d2459..2ea630e 100644
--- 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/db/init-sql/mysql/init.sql
+++ 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/db/init-sql/mysql/init.sql
@@ -48,12 +48,16 @@ CREATE TABLE db_0.t_order_item (item_id INT NOT NULL, 
order_id INT NOT NULL, use
 CREATE TABLE db_0.t_single_table (single_id INT NOT NULL, id INT NOT NULL, 
status VARCHAR(45) NULL, PRIMARY KEY (single_id));
 CREATE TABLE db_0.t_broadcast_table (id INT NOT NULL, status VARCHAR(45) NULL, 
PRIMARY KEY (id));
 CREATE TABLE db_0.t_order_federate (order_id INT NOT NULL, user_id INT NOT 
NULL, status VARCHAR(45) NULL, PRIMARY KEY (order_id));
+CREATE TABLE db_0.t_order_federate_sharding (order_id_sharding INT NOT NULL, 
user_id INT NOT NULL, status VARCHAR(45) NULL, PRIMARY KEY (order_id_sharding));
+CREATE TABLE db_0.t_order_item_federate_sharding (item_id INT NOT NULL, 
order_id INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, remarks 
VARCHAR(45) NULL, PRIMARY KEY (item_id));
 CREATE INDEX order_index_t_order ON db_0.t_order (order_id);
 
 CREATE TABLE db_1.t_order (order_id INT NOT NULL, user_id INT NOT NULL, status 
VARCHAR(45) NULL, PRIMARY KEY (order_id));
 CREATE TABLE db_1.t_order_item (item_id INT NOT NULL, order_id INT NOT NULL, 
user_id INT NOT NULL, status VARCHAR(45) NULL, creation_date DATE, PRIMARY KEY 
(item_id));
 CREATE TABLE db_1.t_broadcast_table (id INT NOT NULL, status VARCHAR(45) NULL, 
PRIMARY KEY (id));
 CREATE TABLE db_1.t_order_item_federate (item_id INT NOT NULL, order_id INT 
NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, PRIMARY KEY (item_id));
+CREATE TABLE db_1.t_order_federate_sharding (order_id_sharding INT NOT NULL, 
user_id INT NOT NULL, status VARCHAR(45) NULL, PRIMARY KEY (order_id_sharding));
+CREATE TABLE db_1.t_order_item_federate_sharding (item_id INT NOT NULL, 
order_id INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, remarks 
VARCHAR(45) NULL, PRIMARY KEY (item_id));
 CREATE INDEX order_index_t_order ON db_1.t_order (order_id);
 
 CREATE TABLE db_2.t_order (order_id INT NOT NULL, user_id INT NOT NULL, status 
VARCHAR(45) NULL, PRIMARY KEY (order_id));
diff --git 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/db/init-sql/oracle/init.sql
 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/db/init-sql/oracle/init.sql
index 1c76c15..c18fcc2 100644
--- 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/db/init-sql/oracle/init.sql
+++ 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/db/init-sql/oracle/init.sql
@@ -45,12 +45,16 @@ CREATE TABLE db_0.t_order_item (item_id INT NOT NULL, 
order_id INT NOT NULL, use
 CREATE TABLE db_0.t_single_table (single_id INT NOT NULL, id INT NOT NULL, 
status VARCHAR(45) NULL, PRIMARY KEY (single_id));
 CREATE TABLE db_0.t_broadcast_table (id INT NOT NULL, status VARCHAR(45) NULL, 
PRIMARY KEY (id));
 CREATE TABLE db_0.t_order_federate (order_id INT NOT NULL, user_id INT NOT 
NULL, status VARCHAR(45) NULL, PRIMARY KEY (order_id));
+CREATE TABLE db_0.t_order_federate_sharding (order_id_sharding INT NOT NULL, 
user_id INT NOT NULL, status VARCHAR(45) NULL, PRIMARY KEY (order_id_sharding));
+CREATE TABLE db_0.t_order_item_federate_sharding (item_id INT NOT NULL, 
order_id INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, remarks 
VARCHAR(45) NULL, PRIMARY KEY (item_id));
 CREATE INDEX order_index_t_order ON db_0.t_order (order_id);
 
 CREATE TABLE db_1.t_order (order_id INT NOT NULL, user_id INT NOT NULL, status 
VARCHAR(45) NULL, PRIMARY KEY (order_id));
 CREATE TABLE db_1.t_order_item (item_id INT NOT NULL, order_id INT NOT NULL, 
user_id INT NOT NULL, status VARCHAR(45) NULL, creation_date DATE, PRIMARY KEY 
(item_id));
 CREATE TABLE db_1.t_broadcast_table (id INT NOT NULL, status VARCHAR(45) NULL, 
PRIMARY KEY (id));
 CREATE TABLE db_1.t_order_item_federate (item_id INT NOT NULL, order_id INT 
NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, PRIMARY KEY (item_id));
+CREATE TABLE db_1.t_order_federate_sharding (order_id_sharding INT NOT NULL, 
user_id INT NOT NULL, status VARCHAR(45) NULL, PRIMARY KEY (order_id_sharding));
+CREATE TABLE db_1.t_order_item_federate_sharding (item_id INT NOT NULL, 
order_id INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, remarks 
VARCHAR(45) NULL, PRIMARY KEY (item_id));
 CREATE INDEX order_index_t_order ON db_1.t_order (order_id);
 
 CREATE TABLE db_2.t_order (order_id INT NOT NULL, user_id INT NOT NULL, status 
VARCHAR(45) NULL, PRIMARY KEY (order_id));
diff --git 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/db/init-sql/postgresql/init.sql
 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/db/init-sql/postgresql/init.sql
index 1ac1ae6..e5cf48d 100644
--- 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/db/init-sql/postgresql/init.sql
+++ 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/db/init-sql/postgresql/init.sql
@@ -44,12 +44,16 @@ DROP TABLE IF EXISTS t_order_item;
 DROP TABLE IF EXISTS t_single_table;
 DROP TABLE IF EXISTS t_broadcast_table;
 DROP TABLE IF EXISTS t_order_federate;
+DROP TABLE IF EXISTS t_order_federate_sharding;
+DROP TABLE IF EXISTS t_order_item_federate_sharding;
 
 CREATE TABLE t_order (order_id INT NOT NULL, user_id INT NOT NULL, status 
VARCHAR(45) NULL, PRIMARY KEY (order_id));
 CREATE TABLE t_order_item (item_id INT NOT NULL, order_id INT NOT NULL, 
user_id INT NOT NULL, status VARCHAR(45) NULL, creation_date DATE, PRIMARY KEY 
(item_id));
 CREATE TABLE t_single_table (single_id INT NOT NULL, id INT NOT NULL, status 
VARCHAR(45) NULL, PRIMARY KEY (single_id));
 CREATE TABLE t_broadcast_table (id INT NOT NULL, status VARCHAR(45) NULL, 
PRIMARY KEY (id));
 CREATE TABLE t_order_federate (order_id INT NOT NULL, user_id INT NOT NULL, 
status VARCHAR(45) NULL, PRIMARY KEY (order_id));
+CREATE TABLE t_order_federate_sharding (order_id_sharding INT NOT NULL, 
user_id INT NOT NULL, status VARCHAR(45) NULL, PRIMARY KEY (order_id_sharding));
+CREATE TABLE t_order_item_federate_sharding (item_id INT NOT NULL, order_id 
INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, remarks 
VARCHAR(45) NULL, PRIMARY KEY (item_id));
 CREATE INDEX order_index_t_order ON t_order (order_id);
 
 \c db_1;
@@ -58,11 +62,15 @@ DROP TABLE IF EXISTS t_order;
 DROP TABLE IF EXISTS t_order_item;
 DROP TABLE IF EXISTS t_broadcast_table;
 DROP TABLE IF EXISTS t_order_item_federate;
+DROP TABLE IF EXISTS t_order_federate_sharding;
+DROP TABLE IF EXISTS t_order_item_federate_sharding;
 
 CREATE TABLE t_order (order_id INT NOT NULL, user_id INT NOT NULL, status 
VARCHAR(45) NULL, PRIMARY KEY (order_id));
 CREATE TABLE t_order_item (item_id INT NOT NULL, order_id INT NOT NULL, 
user_id INT NOT NULL, status VARCHAR(45) NULL, creation_date DATE, PRIMARY KEY 
(item_id));
 CREATE TABLE t_broadcast_table (id INT NOT NULL, status VARCHAR(45) NULL, 
PRIMARY KEY (id));
 CREATE TABLE t_order_item_federate (item_id INT NOT NULL, order_id INT NOT 
NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, PRIMARY KEY (item_id));
+CREATE TABLE t_order_federate_sharding (order_id_sharding INT NOT NULL, 
user_id INT NOT NULL, status VARCHAR(45) NULL, PRIMARY KEY (order_id_sharding));
+CREATE TABLE t_order_item_federate_sharding (item_id INT NOT NULL, order_id 
INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, remarks 
VARCHAR(45) NULL, PRIMARY KEY (item_id));
 CREATE INDEX order_index_t_order ON t_order (order_id);
 
 \c db_2;
diff --git 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/db/init-sql/sqlserver/init.sql
 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/db/init-sql/sqlserver/init.sql
index 8067df1..e9d222d 100644
--- 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/db/init-sql/sqlserver/init.sql
+++ 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/db/init-sql/sqlserver/init.sql
@@ -45,12 +45,16 @@ CREATE TABLE db_0.t_order_item (item_id INT NOT NULL, 
order_id INT NOT NULL, use
 CREATE TABLE db_0.t_single_table (single_id INT NOT NULL, id INT NOT NULL, 
status VARCHAR(45) NULL, PRIMARY KEY (single_id));
 CREATE TABLE db_0.t_broadcast_table (id INT NOT NULL, status VARCHAR(45) NULL, 
PRIMARY KEY (id));
 CREATE TABLE db_0.t_order_federate (order_id INT NOT NULL, user_id INT NOT 
NULL, status VARCHAR(45) NULL, PRIMARY KEY (order_id));
+CREATE TABLE db_0.t_order_federate_sharding (order_id_sharding INT NOT NULL, 
user_id INT NOT NULL, status VARCHAR(45) NULL, PRIMARY KEY (order_id_sharding));
+CREATE TABLE db_0.t_order_item_federate_sharding (item_id INT NOT NULL, 
order_id INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, remarks 
VARCHAR(45) NULL, PRIMARY KEY (item_id));
 CREATE INDEX order_index_t_order ON db_0.t_order (order_id);
 
 CREATE TABLE db_1.t_order (order_id INT NOT NULL, user_id INT NOT NULL, status 
VARCHAR(45) NULL, PRIMARY KEY (order_id));
 CREATE TABLE db_1.t_order_item (item_id INT NOT NULL, order_id INT NOT NULL, 
user_id INT NOT NULL, status VARCHAR(45) NULL, creation_date DATE, PRIMARY KEY 
(item_id));
 CREATE TABLE db_1.t_broadcast_table (id INT NOT NULL, status VARCHAR(45) NULL, 
PRIMARY KEY (id));
 CREATE TABLE db_1.t_order_item_federate (item_id INT NOT NULL, order_id INT 
NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, PRIMARY KEY (item_id));
+CREATE TABLE db_1.t_order_federate_sharding (order_id_sharding INT NOT NULL, 
user_id INT NOT NULL, status VARCHAR(45) NULL, PRIMARY KEY (order_id_sharding));
+CREATE TABLE db_1.t_order_item_federate_sharding (item_id INT NOT NULL, 
order_id INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, remarks 
VARCHAR(45) NULL, PRIMARY KEY (item_id));
 CREATE INDEX order_index_t_order ON db_1.t_order (order_id);
 
 CREATE TABLE db_2.t_order (order_id INT NOT NULL, user_id INT NOT NULL, status 
VARCHAR(45) NULL, PRIMARY KEY (order_id));
diff --git 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/db/rules.yaml
 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/db/rules.yaml
index 90162f1..e8465d6 100644
--- 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/db/rules.yaml
+++ 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/db/rules.yaml
@@ -39,6 +39,19 @@ rules:
         standard:
           shardingColumn: user_id
           shardingAlgorithmName: standard_test
+    t_order_federate_sharding:
+      actualDataNodes: db_${0..1}.t_order_federate_sharding
+      databaseStrategy:
+        standard:
+          shardingColumn: order_id_sharding
+          shardingAlgorithmName: db_inline_order_id
+    t_order_item_federate_sharding:
+      actualDataNodes: db_${0..1}.t_order_item_federate_sharding
+      databaseStrategy:
+        standard:
+          shardingColumn: item_id
+          shardingAlgorithmName: db_inline_item_id
+
   bindingTables:
     - t_order,t_order_item,t_order_details
   broadcastTables:
@@ -48,6 +61,14 @@ rules:
   shardingAlgorithms:
     standard_test:
       type: STANDARD_TEST
+    db_inline_order_id:
+      type: INLINE
+      props:
+        algorithm-expression: db_${order_id_sharding % 
2}.t_order_federate_sharding
+    db_inline_item_id:
+      type: INLINE
+      props:
+        algorithm-expression: db_${db_inline_item_id % 
2}.t_order_item_federate_sharding
 
   keyGenerators:
     constant:
diff --git 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/dbtbl_with_readwrite_splitting/dataset.xml
 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/dbtbl_with_readwrite_splitting/dataset.xml
index 31abf42..07246cb 100644
--- 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/dbtbl_with_readwrite_splitting/dataset.xml
+++ 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/dbtbl_with_readwrite_splitting/dataset.xml
@@ -55,6 +55,11 @@
         <column name="status" type="varchar" />
         <column name="remarks" type="varchar" />
     </metadata>
+    <metadata 
data-nodes="write_ds_1.t_order_federate_sharding_${0..1},read_ds_1.t_order_federate_sharding_${0..1}">
+        <column name="order_id_sharding" type="numeric" />
+        <column name="user_id" type="numeric" />
+        <column name="status" type="varchar" />
+    </metadata>
     <row data-node="write_ds_0.t_single_table" values="1, 1000, init" />
     <row data-node="write_ds_0.t_single_table" values="2, 1101, init" />
     <row data-node="write_ds_0.t_single_table" values="3, 1202, init" />
@@ -379,6 +384,10 @@
     <row data-node="write_ds_1.t_order_item_federate_sharding_0" values="1010, 
10001, 10, init, t_order_item_federate_sharding" />
     <row data-node="write_ds_1.t_order_item_federate_sharding_1" values="1001, 
10001, 11, init, t_order_item_federate_sharding" />
     <row data-node="write_ds_1.t_order_item_federate_sharding_1" values="1011, 
10001, 10, init, t_order_item_federate_sharding" />
+    <row data-node="write_ds_1.t_order_federate_sharding_0" values="1010, 10, 
init" />
+    <row data-node="write_ds_1.t_order_federate_sharding_0" values="1100, 10, 
init" />
+    <row data-node="write_ds_1.t_order_federate_sharding_1" values="1011, 11, 
init" />
+    <row data-node="write_ds_1.t_order_federate_sharding_1" values="1101, 11, 
init" />
     <row data-node="read_ds_0.t_single_table" values="1, 1000, init_read" />
     <row data-node="read_ds_0.t_single_table" values="2, 1101, init_read" />
     <row data-node="read_ds_0.t_single_table" values="3, 1202, init_read" />
@@ -703,4 +712,8 @@
     <row data-node="read_ds_1.t_order_item_federate_sharding_0" values="1010, 
10001, 10, init, t_order_item_federate_sharding" />
     <row data-node="read_ds_1.t_order_item_federate_sharding_1" values="1001, 
10001, 11, init, t_order_item_federate_sharding" />
     <row data-node="read_ds_1.t_order_item_federate_sharding_1" values="1011, 
10001, 10, init, t_order_item_federate_sharding" />
+    <row data-node="read_ds_1.t_order_federate_sharding_0" values="1010, 10, 
init" />
+    <row data-node="read_ds_1.t_order_federate_sharding_0" values="1100, 10, 
init" />
+    <row data-node="read_ds_1.t_order_federate_sharding_1" values="1011, 11, 
init" />
+    <row data-node="read_ds_1.t_order_federate_sharding_1" values="1101, 11, 
init" />
 </dataset>
diff --git 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/dbtbl_with_readwrite_splitting/init-sql/h2/init-read_ds_1.sql
 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/dbtbl_with_readwrite_splitting/init-sql/h2/init-read_ds_1.sql
index ba2ae9a..f4ee788 100644
--- 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/dbtbl_with_readwrite_splitting/init-sql/h2/init-read_ds_1.sql
+++ 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/dbtbl_with_readwrite_splitting/init-sql/h2/init-read_ds_1.sql
@@ -18,7 +18,11 @@
 DROP TABLE IF EXISTS t_order_item_federate;
 DROP TABLE IF EXISTS t_order_item_federate_sharding_0;
 DROP TABLE IF EXISTS t_order_item_federate_sharding_1;
+DROP TABLE IF EXISTS t_order_federate_sharding_0;
+DROP TABLE IF EXISTS t_order_federate_sharding_1;
 
 CREATE TABLE t_order_item_federate (item_id INT NOT NULL, order_id INT NOT 
NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, PRIMARY KEY (item_id));
 CREATE TABLE t_order_item_federate_sharding_0 (item_id INT NOT NULL, order_id 
INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, remarks 
VARCHAR(45) NULL, PRIMARY KEY (item_id));
 CREATE TABLE t_order_item_federate_sharding_1 (item_id INT NOT NULL, order_id 
INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, remarks 
VARCHAR(45) NULL, PRIMARY KEY (item_id));
+CREATE TABLE t_order_federate_sharding_0 (order_id_sharding INT NOT NULL, 
user_id INT NOT NULL, status VARCHAR(45) NULL, PRIMARY KEY (order_id_sharding));
+CREATE TABLE t_order_federate_sharding_1 (order_id_sharding INT NOT NULL, 
user_id INT NOT NULL, status VARCHAR(45) NULL, PRIMARY KEY (order_id_sharding));
diff --git 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/dbtbl_with_readwrite_splitting/init-sql/h2/init-write_ds_1.sql
 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/dbtbl_with_readwrite_splitting/init-sql/h2/init-write_ds_1.sql
index ba2ae9a..f4ee788 100644
--- 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/dbtbl_with_readwrite_splitting/init-sql/h2/init-write_ds_1.sql
+++ 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/dbtbl_with_readwrite_splitting/init-sql/h2/init-write_ds_1.sql
@@ -18,7 +18,11 @@
 DROP TABLE IF EXISTS t_order_item_federate;
 DROP TABLE IF EXISTS t_order_item_federate_sharding_0;
 DROP TABLE IF EXISTS t_order_item_federate_sharding_1;
+DROP TABLE IF EXISTS t_order_federate_sharding_0;
+DROP TABLE IF EXISTS t_order_federate_sharding_1;
 
 CREATE TABLE t_order_item_federate (item_id INT NOT NULL, order_id INT NOT 
NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, PRIMARY KEY (item_id));
 CREATE TABLE t_order_item_federate_sharding_0 (item_id INT NOT NULL, order_id 
INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, remarks 
VARCHAR(45) NULL, PRIMARY KEY (item_id));
 CREATE TABLE t_order_item_federate_sharding_1 (item_id INT NOT NULL, order_id 
INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, remarks 
VARCHAR(45) NULL, PRIMARY KEY (item_id));
+CREATE TABLE t_order_federate_sharding_0 (order_id_sharding INT NOT NULL, 
user_id INT NOT NULL, status VARCHAR(45) NULL, PRIMARY KEY (order_id_sharding));
+CREATE TABLE t_order_federate_sharding_1 (order_id_sharding INT NOT NULL, 
user_id INT NOT NULL, status VARCHAR(45) NULL, PRIMARY KEY (order_id_sharding));
diff --git 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/dbtbl_with_readwrite_splitting/init-sql/mysql/init.sql
 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/dbtbl_with_readwrite_splitting/init-sql/mysql/init.sql
index ffae036..5090937 100644
--- 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/dbtbl_with_readwrite_splitting/init-sql/mysql/init.sql
+++ 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/dbtbl_with_readwrite_splitting/init-sql/mysql/init.sql
@@ -121,6 +121,8 @@ CREATE TABLE write_ds_1.t_broadcast_table (id INT NOT NULL, 
status VARCHAR(45) N
 CREATE TABLE write_ds_1.t_order_item_federate (item_id INT NOT NULL, order_id 
INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, PRIMARY KEY 
(item_id));
 CREATE TABLE write_ds_1.t_order_item_federate_sharding_0 (item_id INT NOT 
NULL, order_id INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, 
remarks VARCHAR(45) NULL, PRIMARY KEY (item_id));
 CREATE TABLE write_ds_1.t_order_item_federate_sharding_1 (item_id INT NOT 
NULL, order_id INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, 
remarks VARCHAR(45) NULL, PRIMARY KEY (item_id));
+CREATE TABLE write_ds_1.t_order_federate_sharding_0 (order_id_sharding INT NOT 
NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, PRIMARY KEY 
(order_id_sharding));
+CREATE TABLE write_ds_1.t_order_federate_sharding_1 (order_id_sharding INT NOT 
NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, PRIMARY KEY 
(order_id_sharding));
 CREATE INDEX order_index_t_order_0 ON write_ds_1.t_order_0 (order_id);
 CREATE INDEX order_index_t_order_1 ON write_ds_1.t_order_1 (order_id);
 CREATE INDEX order_index_t_order_2 ON write_ds_1.t_order_2 (order_id);
@@ -446,6 +448,8 @@ CREATE TABLE read_ds_1.t_broadcast_table (id INT NOT NULL, 
status VARCHAR(45) NU
 CREATE TABLE read_ds_1.t_order_item_federate (item_id INT NOT NULL, order_id 
INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, PRIMARY KEY 
(item_id));
 CREATE TABLE read_ds_1.t_order_item_federate_sharding_0 (item_id INT NOT NULL, 
order_id INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, remarks 
VARCHAR(45) NULL, PRIMARY KEY (item_id));
 CREATE TABLE read_ds_1.t_order_item_federate_sharding_1 (item_id INT NOT NULL, 
order_id INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, remarks 
VARCHAR(45) NULL, PRIMARY KEY (item_id));
+CREATE TABLE read_ds_1.t_order_federate_sharding_0 (order_id_sharding INT NOT 
NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, PRIMARY KEY 
(order_id_sharding));
+CREATE TABLE read_ds_1.t_order_federate_sharding_1 (order_id_sharding INT NOT 
NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, PRIMARY KEY 
(order_id_sharding));
 CREATE INDEX order_index_t_order_0 ON read_ds_1.t_order_0 (order_id);
 CREATE INDEX order_index_t_order_1 ON read_ds_1.t_order_1 (order_id);
 CREATE INDEX order_index_t_order_2 ON read_ds_1.t_order_2 (order_id);
diff --git 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/dbtbl_with_readwrite_splitting/init-sql/oracle/init.sql
 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/dbtbl_with_readwrite_splitting/init-sql/oracle/init.sql
index ae75990..8211bd6 100644
--- 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/dbtbl_with_readwrite_splitting/init-sql/oracle/init.sql
+++ 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/dbtbl_with_readwrite_splitting/init-sql/oracle/init.sql
@@ -118,6 +118,8 @@ CREATE TABLE write_ds_1.t_broadcast_table (id INT NOT NULL, 
status VARCHAR(45) N
 CREATE TABLE write_ds_1.t_order_item_federate (item_id INT NOT NULL, order_id 
INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, PRIMARY KEY 
(item_id));
 CREATE TABLE write_ds_1.t_order_item_federate_sharding_0 (item_id INT NOT 
NULL, order_id INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, 
remarks VARCHAR(45) NULL, PRIMARY KEY (item_id));
 CREATE TABLE write_ds_1.t_order_item_federate_sharding_1 (item_id INT NOT 
NULL, order_id INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, 
remarks VARCHAR(45) NULL, PRIMARY KEY (item_id));
+CREATE TABLE write_ds_1.t_order_federate_sharding_0 (order_id_sharding INT NOT 
NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, PRIMARY KEY 
(order_id_sharding));
+CREATE TABLE write_ds_1.t_order_federate_sharding_1 (order_id_sharding INT NOT 
NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, PRIMARY KEY 
(order_id_sharding));
 CREATE INDEX order_index_t_order_0 ON write_ds_1.t_order_0 (order_id);
 CREATE INDEX order_index_t_order_1 ON write_ds_1.t_order_1 (order_id);
 CREATE INDEX order_index_t_order_2 ON write_ds_1.t_order_2 (order_id);
@@ -443,6 +445,8 @@ CREATE TABLE read_ds_1.t_broadcast_table (id INT NOT NULL, 
status VARCHAR(45) NU
 CREATE TABLE read_ds_1.t_order_item_federate (item_id INT NOT NULL, order_id 
INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, PRIMARY KEY 
(item_id));
 CREATE TABLE read_ds_1.t_order_item_federate_sharding_0 (item_id INT NOT NULL, 
order_id INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, remarks 
VARCHAR(45) NULL, PRIMARY KEY (item_id));
 CREATE TABLE read_ds_1.t_order_item_federate_sharding_1 (item_id INT NOT NULL, 
order_id INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, remarks 
VARCHAR(45) NULL, PRIMARY KEY (item_id));
+CREATE TABLE read_ds_1.t_order_federate_sharding_0 (order_id_sharding INT NOT 
NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, PRIMARY KEY 
(order_id_sharding));
+CREATE TABLE read_ds_1.t_order_federate_sharding_1 (order_id_sharding INT NOT 
NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, PRIMARY KEY 
(order_id_sharding));
 CREATE INDEX order_index_t_order_0 ON read_ds_1.t_order_0 (order_id);
 CREATE INDEX order_index_t_order_1 ON read_ds_1.t_order_1 (order_id);
 CREATE INDEX order_index_t_order_2 ON read_ds_1.t_order_2 (order_id);
diff --git 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/dbtbl_with_readwrite_splitting/init-sql/postgresql/init.sql
 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/dbtbl_with_readwrite_splitting/init-sql/postgresql/init.sql
index 0391463..6aaebe9 100644
--- 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/dbtbl_with_readwrite_splitting/init-sql/postgresql/init.sql
+++ 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/dbtbl_with_readwrite_splitting/init-sql/postgresql/init.sql
@@ -143,6 +143,8 @@ DROP TABLE IF EXISTS t_broadcast_table;
 DROP TABLE IF EXISTS t_order_item_federate;
 DROP TABLE IF EXISTS t_order_item_federate_sharding_0;
 DROP TABLE IF EXISTS t_order_item_federate_sharding_1;
+DROP TABLE IF EXISTS t_order_federate_sharding_0;
+DROP TABLE IF EXISTS t_order_federate_sharding_1;
 
 CREATE TABLE t_order_0 (order_id INT NOT NULL, user_id INT NOT NULL, status 
VARCHAR(45) NULL, PRIMARY KEY (order_id));
 CREATE TABLE t_order_item_0 (item_id INT NOT NULL, order_id INT NOT NULL, 
user_id INT NOT NULL, status VARCHAR(45) NULL, creation_date DATE, PRIMARY KEY 
(item_id));
@@ -168,6 +170,8 @@ CREATE TABLE t_broadcast_table (id INT NOT NULL, status 
VARCHAR(45) NULL, PRIMAR
 CREATE TABLE t_order_item_federate (item_id INT NOT NULL, order_id INT NOT 
NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, PRIMARY KEY (item_id));
 CREATE TABLE t_order_item_federate_sharding_0 (item_id INT NOT NULL, order_id 
INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, remarks 
VARCHAR(45) NULL, PRIMARY KEY (item_id));
 CREATE TABLE t_order_item_federate_sharding_1 (item_id INT NOT NULL, order_id 
INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, remarks 
VARCHAR(45) NULL, PRIMARY KEY (item_id));
+CREATE TABLE t_order_federate_sharding_0 (order_id_sharding INT NOT NULL, 
user_id INT NOT NULL, status VARCHAR(45) NULL, PRIMARY KEY (order_id_sharding));
+CREATE TABLE t_order_federate_sharding_1 (order_id_sharding INT NOT NULL, 
user_id INT NOT NULL, status VARCHAR(45) NULL, PRIMARY KEY (order_id_sharding));
 CREATE INDEX order_index_t_order_0 ON t_order_0 (order_id);
 CREATE INDEX order_index_t_order_1 ON t_order_1 (order_id);
 CREATE INDEX order_index_t_order_2 ON t_order_2 (order_id);
@@ -713,6 +717,8 @@ DROP TABLE IF EXISTS t_broadcast_table;
 DROP TABLE IF EXISTS t_order_item_federate;
 DROP TABLE IF EXISTS t_order_item_federate_sharding_0;
 DROP TABLE IF EXISTS t_order_item_federate_sharding_1;
+DROP TABLE IF EXISTS t_order_federate_sharding_0;
+DROP TABLE IF EXISTS t_order_federate_sharding_1;
 
 CREATE TABLE t_order_0 (order_id INT NOT NULL, user_id INT NOT NULL, status 
VARCHAR(45) NULL, PRIMARY KEY (order_id));
 CREATE TABLE t_order_item_0 (item_id INT NOT NULL, order_id INT NOT NULL, 
user_id INT NOT NULL, status VARCHAR(45) NULL, creation_date DATE, PRIMARY KEY 
(item_id));
@@ -738,6 +744,8 @@ CREATE TABLE t_broadcast_table (id INT NOT NULL, status 
VARCHAR(45) NULL, PRIMAR
 CREATE TABLE t_order_item_federate (item_id INT NOT NULL, order_id INT NOT 
NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, PRIMARY KEY (item_id));
 CREATE TABLE t_order_item_federate_sharding_0 (item_id INT NOT NULL, order_id 
INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, remarks 
VARCHAR(45) NULL, PRIMARY KEY (item_id));
 CREATE TABLE t_order_item_federate_sharding_1 (item_id INT NOT NULL, order_id 
INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, remarks 
VARCHAR(45) NULL, PRIMARY KEY (item_id));
+CREATE TABLE t_order_federate_sharding_0 (order_id_sharding INT NOT NULL, 
user_id INT NOT NULL, status VARCHAR(45) NULL, PRIMARY KEY (order_id_sharding));
+CREATE TABLE t_order_federate_sharding_1 (order_id_sharding INT NOT NULL, 
user_id INT NOT NULL, status VARCHAR(45) NULL, PRIMARY KEY (order_id_sharding));
 CREATE INDEX order_index_t_order_0 ON t_order_0 (order_id);
 CREATE INDEX order_index_t_order_1 ON t_order_1 (order_id);
 CREATE INDEX order_index_t_order_2 ON t_order_2 (order_id);
diff --git 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/dbtbl_with_readwrite_splitting/init-sql/sqlserver/init.sql
 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/dbtbl_with_readwrite_splitting/init-sql/sqlserver/init.sql
index b62a3cc..3b3311d 100644
--- 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/dbtbl_with_readwrite_splitting/init-sql/sqlserver/init.sql
+++ 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/dbtbl_with_readwrite_splitting/init-sql/sqlserver/init.sql
@@ -118,6 +118,8 @@ CREATE TABLE write_ds_1.t_broadcast_table (id INT NOT NULL, 
status VARCHAR(45) N
 CREATE TABLE write_ds_1.t_order_item_federate (item_id INT NOT NULL, order_id 
INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, PRIMARY KEY 
(item_id));
 CREATE TABLE write_ds_1.t_order_item_federate_sharding_0 (item_id INT NOT 
NULL, order_id INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, 
remarks VARCHAR(45) NULL, PRIMARY KEY (item_id));
 CREATE TABLE write_ds_1.t_order_item_federate_sharding_1 (item_id INT NOT 
NULL, order_id INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, 
remarks VARCHAR(45) NULL, PRIMARY KEY (item_id));
+CREATE TABLE write_ds_1.t_order_federate_sharding_0 (order_id_sharding INT NOT 
NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, PRIMARY KEY 
(order_id_sharding));
+CREATE TABLE write_ds_1.t_order_federate_sharding_1 (order_id_sharding INT NOT 
NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, PRIMARY KEY 
(order_id_sharding));
 CREATE INDEX order_index_t_order_0 ON write_ds_1.t_order_0 (order_id);
 CREATE INDEX order_index_t_order_1 ON write_ds_1.t_order_1 (order_id);
 CREATE INDEX order_index_t_order_2 ON write_ds_1.t_order_2 (order_id);
@@ -443,6 +445,8 @@ CREATE TABLE read_ds_1.t_broadcast_table (id INT NOT NULL, 
status VARCHAR(45) NU
 CREATE TABLE read_ds_1.t_order_item_federate (item_id INT NOT NULL, order_id 
INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, PRIMARY KEY 
(item_id));
 CREATE TABLE read_ds_1.t_order_item_federate_sharding_0 (item_id INT NOT NULL, 
order_id INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, remarks 
VARCHAR(45) NULL, PRIMARY KEY (item_id));
 CREATE TABLE read_ds_1.t_order_item_federate_sharding_1 (item_id INT NOT NULL, 
order_id INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, remarks 
VARCHAR(45) NULL, PRIMARY KEY (item_id));
+CREATE TABLE read_ds_1.t_order_federate_sharding_0 (order_id_sharding INT NOT 
NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, PRIMARY KEY 
(order_id_sharding));
+CREATE TABLE read_ds_1.t_order_federate_sharding_1 (order_id_sharding INT NOT 
NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, PRIMARY KEY 
(order_id_sharding));
 CREATE INDEX order_index_t_order_0 ON read_ds_1.t_order_0 (order_id);
 CREATE INDEX order_index_t_order_1 ON read_ds_1.t_order_1 (order_id);
 CREATE INDEX order_index_t_order_2 ON read_ds_1.t_order_2 (order_id);
diff --git 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/dbtbl_with_readwrite_splitting/rules.yaml
 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/dbtbl_with_readwrite_splitting/rules.yaml
index 0035e87..c9bf96e 100644
--- 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/dbtbl_with_readwrite_splitting/rules.yaml
+++ 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/dbtbl_with_readwrite_splitting/rules.yaml
@@ -57,6 +57,12 @@ rules:
         standard:
           shardingColumn: item_id
           shardingAlgorithmName: table_inline_item_id
+    t_order_federate_sharding:
+      actualDataNodes: pr_ds_1.t_order_federate_sharding_${0..1}
+      tableStrategy:
+        standard:
+          shardingColumn: order_id_sharding
+          shardingAlgorithmName: table_inline_order_id
   bindingTables:
     - t_order,t_order_item,t_order_details
   broadcastTables:
@@ -70,6 +76,10 @@ rules:
       type: INLINE
       props:
         algorithm-expression: t_order_item_federate_sharding_${item_id % 2}
+    table_inline_order_id:
+      type: INLINE
+      props:
+        algorithm-expression: t_order_federate_sharding_${order_id_sharding % 
2}
 
   keyGenerators:
     constant:
diff --git 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/dbtbl_with_readwrite_splitting_and_encrypt/dataset.xml
 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/dbtbl_with_readwrite_splitting_and_encrypt/dataset.xml
index 193ff81..7826495 100644
--- 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/dbtbl_with_readwrite_splitting_and_encrypt/dataset.xml
+++ 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/dbtbl_with_readwrite_splitting_and_encrypt/dataset.xml
@@ -52,6 +52,11 @@
         <column name="status" type="varchar" />
         <column name="remarks" type="varchar" />
     </metadata>
+    <metadata 
data-nodes="encrypt_write_ds_1.t_order_federate_sharding_${0..1},encrypt_read_ds_1.t_order_federate_sharding_${0..1}">
+        <column name="order_id_sharding" type="numeric" />
+        <column name="user_id" type="numeric" />
+        <column name="status" type="varchar" />
+    </metadata>
     <row data-node="encrypt_write_ds_0.t_single_table" values="1, 0, init" />
     <row data-node="encrypt_write_ds_0.t_single_table" values="2, 11, init" />
     <row data-node="encrypt_write_ds_0.t_single_table" values="3, 22, init" />
@@ -266,6 +271,10 @@
     <row data-node="encrypt_write_ds_1.t_order_item_federate_sharding_0" 
values="1010, 10001, 10, init, t_order_item_federate_sharding" />
     <row data-node="encrypt_write_ds_1.t_order_item_federate_sharding_1" 
values="1001, 10001, 11, init, t_order_item_federate_sharding" />
     <row data-node="encrypt_write_ds_1.t_order_item_federate_sharding_1" 
values="1011, 10001, 10, init, t_order_item_federate_sharding" />
+    <row data-node="encrypt_write_ds_1.t_order_federate_sharding_0" 
values="1010, 10, init" />
+    <row data-node="encrypt_write_ds_1.t_order_federate_sharding_0" 
values="1100, 10, init" />
+    <row data-node="encrypt_write_ds_1.t_order_federate_sharding_1" 
values="1011, 11, init" />
+    <row data-node="encrypt_write_ds_1.t_order_federate_sharding_1" 
values="1101, 11, init" />
     <row data-node="encrypt_read_ds_0.t_single_table" values="1, 0, init_read" 
/>
     <row data-node="encrypt_read_ds_0.t_single_table" values="2, 11, 
init_read" />
     <row data-node="encrypt_read_ds_0.t_single_table" values="3, 22, 
init_read" />
@@ -480,4 +489,8 @@
     <row data-node="encrypt_read_ds_1.t_order_item_federate_sharding_0" 
values="1010, 10001, 10, init, t_order_item_federate_sharding" />
     <row data-node="encrypt_read_ds_1.t_order_item_federate_sharding_1" 
values="1001, 10001, 11, init, t_order_item_federate_sharding" />
     <row data-node="encrypt_read_ds_1.t_order_item_federate_sharding_1" 
values="1011, 10001, 10, init, t_order_item_federate_sharding" />
+    <row data-node="encrypt_read_ds_1.t_order_federate_sharding_0" 
values="1010, 10, init" />
+    <row data-node="encrypt_read_ds_1.t_order_federate_sharding_0" 
values="1100, 10, init" />
+    <row data-node="encrypt_read_ds_1.t_order_federate_sharding_1" 
values="1011, 11, init" />
+    <row data-node="encrypt_read_ds_1.t_order_federate_sharding_1" 
values="1101, 11, init" />
 </dataset>
diff --git 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/dbtbl_with_readwrite_splitting_and_encrypt/init-sql/h2/init-encrypt_read_ds_1.sql
 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/dbtbl_with_readwrite_splitting_and_encrypt/init-sql/h2/init-encrypt_read_ds_1.sql
index ba2ae9a..f4ee788 100644
--- 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/dbtbl_with_readwrite_splitting_and_encrypt/init-sql/h2/init-encrypt_read_ds_1.sql
+++ 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/dbtbl_with_readwrite_splitting_and_encrypt/init-sql/h2/init-encrypt_read_ds_1.sql
@@ -18,7 +18,11 @@
 DROP TABLE IF EXISTS t_order_item_federate;
 DROP TABLE IF EXISTS t_order_item_federate_sharding_0;
 DROP TABLE IF EXISTS t_order_item_federate_sharding_1;
+DROP TABLE IF EXISTS t_order_federate_sharding_0;
+DROP TABLE IF EXISTS t_order_federate_sharding_1;
 
 CREATE TABLE t_order_item_federate (item_id INT NOT NULL, order_id INT NOT 
NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, PRIMARY KEY (item_id));
 CREATE TABLE t_order_item_federate_sharding_0 (item_id INT NOT NULL, order_id 
INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, remarks 
VARCHAR(45) NULL, PRIMARY KEY (item_id));
 CREATE TABLE t_order_item_federate_sharding_1 (item_id INT NOT NULL, order_id 
INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, remarks 
VARCHAR(45) NULL, PRIMARY KEY (item_id));
+CREATE TABLE t_order_federate_sharding_0 (order_id_sharding INT NOT NULL, 
user_id INT NOT NULL, status VARCHAR(45) NULL, PRIMARY KEY (order_id_sharding));
+CREATE TABLE t_order_federate_sharding_1 (order_id_sharding INT NOT NULL, 
user_id INT NOT NULL, status VARCHAR(45) NULL, PRIMARY KEY (order_id_sharding));
diff --git 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/dbtbl_with_readwrite_splitting_and_encrypt/init-sql/h2/init-encrypt_write_ds_1.sql
 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/dbtbl_with_readwrite_splitting_and_encrypt/init-sql/h2/init-encrypt_write_ds_1.sql
index ba2ae9a..f4ee788 100644
--- 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/dbtbl_with_readwrite_splitting_and_encrypt/init-sql/h2/init-encrypt_write_ds_1.sql
+++ 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/dbtbl_with_readwrite_splitting_and_encrypt/init-sql/h2/init-encrypt_write_ds_1.sql
@@ -18,7 +18,11 @@
 DROP TABLE IF EXISTS t_order_item_federate;
 DROP TABLE IF EXISTS t_order_item_federate_sharding_0;
 DROP TABLE IF EXISTS t_order_item_federate_sharding_1;
+DROP TABLE IF EXISTS t_order_federate_sharding_0;
+DROP TABLE IF EXISTS t_order_federate_sharding_1;
 
 CREATE TABLE t_order_item_federate (item_id INT NOT NULL, order_id INT NOT 
NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, PRIMARY KEY (item_id));
 CREATE TABLE t_order_item_federate_sharding_0 (item_id INT NOT NULL, order_id 
INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, remarks 
VARCHAR(45) NULL, PRIMARY KEY (item_id));
 CREATE TABLE t_order_item_federate_sharding_1 (item_id INT NOT NULL, order_id 
INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, remarks 
VARCHAR(45) NULL, PRIMARY KEY (item_id));
+CREATE TABLE t_order_federate_sharding_0 (order_id_sharding INT NOT NULL, 
user_id INT NOT NULL, status VARCHAR(45) NULL, PRIMARY KEY (order_id_sharding));
+CREATE TABLE t_order_federate_sharding_1 (order_id_sharding INT NOT NULL, 
user_id INT NOT NULL, status VARCHAR(45) NULL, PRIMARY KEY (order_id_sharding));
diff --git 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/dbtbl_with_readwrite_splitting_and_encrypt/init-sql/mysql/init.sql
 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/dbtbl_with_readwrite_splitting_and_encrypt/init-sql/mysql/init.sql
index 48b3250..fe3bb61 100644
--- 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/dbtbl_with_readwrite_splitting_and_encrypt/init-sql/mysql/init.sql
+++ 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/dbtbl_with_readwrite_splitting_and_encrypt/init-sql/mysql/init.sql
@@ -119,6 +119,8 @@ CREATE TABLE encrypt_write_ds_1.t_user_item_9 (item_id INT 
NOT NULL, user_id INT
 CREATE TABLE encrypt_write_ds_1.t_order_item_federate (item_id INT NOT NULL, 
order_id INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, PRIMARY 
KEY (item_id));
 CREATE TABLE encrypt_write_ds_1.t_order_item_federate_sharding_0 (item_id INT 
NOT NULL, order_id INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, 
remarks VARCHAR(45) NULL, PRIMARY KEY (item_id));
 CREATE TABLE encrypt_write_ds_1.t_order_item_federate_sharding_1 (item_id INT 
NOT NULL, order_id INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, 
remarks VARCHAR(45) NULL, PRIMARY KEY (item_id));
+CREATE TABLE encrypt_write_ds_1.t_order_federate_sharding_0 (order_id_sharding 
INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, PRIMARY KEY 
(order_id_sharding));
+CREATE TABLE encrypt_write_ds_1.t_order_federate_sharding_1 (order_id_sharding 
INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, PRIMARY KEY 
(order_id_sharding));
 CREATE INDEX user_index_t_user_0 ON encrypt_write_ds_1.t_user_0 (user_id);
 CREATE INDEX user_index_t_user_1 ON encrypt_write_ds_1.t_user_1 (user_id);
 CREATE INDEX user_index_t_user_2 ON encrypt_write_ds_1.t_user_2 (user_id);
@@ -434,6 +436,8 @@ CREATE TABLE encrypt_read_ds_1.t_user_item_9 (item_id INT 
NOT NULL, user_id INT
 CREATE TABLE encrypt_read_ds_1.t_order_item_federate (item_id INT NOT NULL, 
order_id INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, PRIMARY 
KEY (item_id));
 CREATE TABLE encrypt_read_ds_1.t_order_item_federate_sharding_0 (item_id INT 
NOT NULL, order_id INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, 
remarks VARCHAR(45) NULL, PRIMARY KEY (item_id));
 CREATE TABLE encrypt_read_ds_1.t_order_item_federate_sharding_1 (item_id INT 
NOT NULL, order_id INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, 
remarks VARCHAR(45) NULL, PRIMARY KEY (item_id));
+CREATE TABLE encrypt_read_ds_1.t_order_federate_sharding_0 (order_id_sharding 
INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, PRIMARY KEY 
(order_id_sharding));
+CREATE TABLE encrypt_read_ds_1.t_order_federate_sharding_1 (order_id_sharding 
INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, PRIMARY KEY 
(order_id_sharding));
 CREATE INDEX user_index_t_user_0 ON encrypt_read_ds_1.t_user_0 (user_id);
 CREATE INDEX user_index_t_user_1 ON encrypt_read_ds_1.t_user_1 (user_id);
 CREATE INDEX user_index_t_user_2 ON encrypt_read_ds_1.t_user_2 (user_id);
diff --git 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/dbtbl_with_readwrite_splitting_and_encrypt/init-sql/oracle/init.sql
 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/dbtbl_with_readwrite_splitting_and_encrypt/init-sql/oracle/init.sql
index e0e4354..c933b96 100644
--- 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/dbtbl_with_readwrite_splitting_and_encrypt/init-sql/oracle/init.sql
+++ 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/dbtbl_with_readwrite_splitting_and_encrypt/init-sql/oracle/init.sql
@@ -116,6 +116,8 @@ CREATE TABLE encrypt_write_ds_1.t_user_item_9 (item_id INT 
NOT NULL, user_id INT
 CREATE TABLE encrypt_write_ds_1.t_order_item_federate (item_id INT NOT NULL, 
order_id INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, PRIMARY 
KEY (item_id));
 CREATE TABLE encrypt_write_ds_1.t_order_item_federate_sharding_0 (item_id INT 
NOT NULL, order_id INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, 
remarks VARCHAR(45) NULL, PRIMARY KEY (item_id));
 CREATE TABLE encrypt_write_ds_1.t_order_item_federate_sharding_1 (item_id INT 
NOT NULL, order_id INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, 
remarks VARCHAR(45) NULL, PRIMARY KEY (item_id));
+CREATE TABLE encrypt_write_ds_1.t_order_federate_sharding_0 (order_id_sharding 
INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, PRIMARY KEY 
(order_id_sharding));
+CREATE TABLE encrypt_write_ds_1.t_order_federate_sharding_1 (order_id_sharding 
INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, PRIMARY KEY 
(order_id_sharding));
 CREATE INDEX user_index_t_user_0 ON encrypt_write_ds_1.t_user_0 (user_id);
 CREATE INDEX user_index_t_user_1 ON encrypt_write_ds_1.t_user_1 (user_id);
 CREATE INDEX user_index_t_user_2 ON encrypt_write_ds_1.t_user_2 (user_id);
@@ -431,6 +433,8 @@ CREATE TABLE encrypt_read_ds_1.t_user_item_9 (item_id INT 
NOT NULL, user_id INT
 CREATE TABLE encrypt_read_ds_1.t_order_item_federate (item_id INT NOT NULL, 
order_id INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, PRIMARY 
KEY (item_id));
 CREATE TABLE encrypt_read_ds_1.t_order_item_federate_sharding_0 (item_id INT 
NOT NULL, order_id INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, 
remarks VARCHAR(45) NULL, PRIMARY KEY (item_id));
 CREATE TABLE encrypt_read_ds_1.t_order_item_federate_sharding_1 (item_id INT 
NOT NULL, order_id INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, 
remarks VARCHAR(45) NULL, PRIMARY KEY (item_id));
+CREATE TABLE encrypt_read_ds_1.t_order_federate_sharding_0 (order_id_sharding 
INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, PRIMARY KEY 
(order_id_sharding));
+CREATE TABLE encrypt_read_ds_1.t_order_federate_sharding_1 (order_id_sharding 
INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, PRIMARY KEY 
(order_id_sharding));
 CREATE INDEX user_index_t_user_0 ON encrypt_read_ds_1.t_user_0 (user_id);
 CREATE INDEX user_index_t_user_1 ON encrypt_read_ds_1.t_user_1 (user_id);
 CREATE INDEX user_index_t_user_2 ON encrypt_read_ds_1.t_user_2 (user_id);
diff --git 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/dbtbl_with_readwrite_splitting_and_encrypt/init-sql/postgresql/init.sql
 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/dbtbl_with_readwrite_splitting_and_encrypt/init-sql/postgresql/init.sql
index 52b0ea6..422e380 100644
--- 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/dbtbl_with_readwrite_splitting_and_encrypt/init-sql/postgresql/init.sql
+++ 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/dbtbl_with_readwrite_splitting_and_encrypt/init-sql/postgresql/init.sql
@@ -140,6 +140,8 @@ DROP TABLE IF EXISTS t_user_item_9;
 DROP TABLE IF EXISTS t_order_item_federate;
 DROP TABLE IF EXISTS t_order_item_federate_sharding_0;
 DROP TABLE IF EXISTS t_order_item_federate_sharding_1;
+DROP TABLE IF EXISTS t_order_federate_sharding_0;
+DROP TABLE IF EXISTS t_order_federate_sharding_1;
 
 CREATE TABLE t_user_0 (user_id INT NOT NULL, address_id INT NOT NULL, 
pwd_plain VARCHAR(45) NULL, pwd_cipher VARCHAR(45) NULL, status VARCHAR(45) 
NULL, PRIMARY KEY (user_id));
 CREATE TABLE t_user_item_0 (item_id INT NOT NULL, user_id INT NOT NULL, status 
VARCHAR(45) NULL, creation_date DATE, PRIMARY KEY (item_id));
@@ -164,6 +166,8 @@ CREATE TABLE t_user_item_9 (item_id INT NOT NULL, user_id 
INT NOT NULL, status V
 CREATE TABLE t_order_item_federate (item_id INT NOT NULL, order_id INT NOT 
NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, PRIMARY KEY (item_id));
 CREATE TABLE t_order_item_federate_sharding_0 (item_id INT NOT NULL, order_id 
INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, remarks 
VARCHAR(45) NULL, PRIMARY KEY (item_id));
 CREATE TABLE t_order_item_federate_sharding_1 (item_id INT NOT NULL, order_id 
INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, remarks 
VARCHAR(45) NULL, PRIMARY KEY (item_id));
+CREATE TABLE t_order_federate_sharding_0 (order_id_sharding INT NOT NULL, 
user_id INT NOT NULL, status VARCHAR(45) NULL, PRIMARY KEY (order_id_sharding));
+CREATE TABLE t_order_federate_sharding_1 (order_id_sharding INT NOT NULL, 
user_id INT NOT NULL, status VARCHAR(45) NULL, PRIMARY KEY (order_id_sharding));
 CREATE INDEX user_index_t_user_0 ON t_user_0 (user_id);
 CREATE INDEX user_index_t_user_1 ON t_user_1 (user_id);
 CREATE INDEX user_index_t_user_2 ON t_user_2 (user_id);
@@ -690,6 +694,8 @@ DROP TABLE IF EXISTS t_user_item_9;
 DROP TABLE IF EXISTS t_order_item_federate;
 DROP TABLE IF EXISTS t_order_item_federate_sharding_0;
 DROP TABLE IF EXISTS t_order_item_federate_sharding_1;
+DROP TABLE IF EXISTS t_order_federate_sharding_0;
+DROP TABLE IF EXISTS t_order_federate_sharding_1;
 
 CREATE TABLE t_user_0 (user_id INT NOT NULL, address_id INT NOT NULL, 
pwd_plain VARCHAR(45) NULL, pwd_cipher VARCHAR(45) NULL, status VARCHAR(45) 
NULL, PRIMARY KEY (user_id));
 CREATE TABLE t_user_item_0 (item_id INT NOT NULL, user_id INT NOT NULL, status 
VARCHAR(45) NULL, creation_date DATE, PRIMARY KEY (item_id));
@@ -714,6 +720,8 @@ CREATE TABLE t_user_item_9 (item_id INT NOT NULL, user_id 
INT NOT NULL, status V
 CREATE TABLE t_order_item_federate (item_id INT NOT NULL, order_id INT NOT 
NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, PRIMARY KEY (item_id));
 CREATE TABLE t_order_item_federate_sharding_0 (item_id INT NOT NULL, order_id 
INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, remarks 
VARCHAR(45) NULL, PRIMARY KEY (item_id));
 CREATE TABLE t_order_item_federate_sharding_1 (item_id INT NOT NULL, order_id 
INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, remarks 
VARCHAR(45) NULL, PRIMARY KEY (item_id));
+CREATE TABLE t_order_federate_sharding_0 (order_id_sharding INT NOT NULL, 
user_id INT NOT NULL, status VARCHAR(45) NULL, PRIMARY KEY (order_id_sharding));
+CREATE TABLE t_order_federate_sharding_1 (order_id_sharding INT NOT NULL, 
user_id INT NOT NULL, status VARCHAR(45) NULL, PRIMARY KEY (order_id_sharding));
 CREATE INDEX user_index_t_user_0 ON t_user_0 (user_id);
 CREATE INDEX user_index_t_user_1 ON t_user_1 (user_id);
 CREATE INDEX user_index_t_user_2 ON t_user_2 (user_id);
diff --git 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/dbtbl_with_readwrite_splitting_and_encrypt/init-sql/sqlserver/init.sql
 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/dbtbl_with_readwrite_splitting_and_encrypt/init-sql/sqlserver/init.sql
index 8e2035d..838dee9 100644
--- 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/dbtbl_with_readwrite_splitting_and_encrypt/init-sql/sqlserver/init.sql
+++ 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/dbtbl_with_readwrite_splitting_and_encrypt/init-sql/sqlserver/init.sql
@@ -116,6 +116,8 @@ CREATE TABLE encrypt_write_ds_1.t_user_item_9 (item_id INT 
NOT NULL, user_id INT
 CREATE TABLE encrypt_write_ds_1.t_order_item_federate (item_id INT NOT NULL, 
order_id INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, PRIMARY 
KEY (item_id));
 CREATE TABLE encrypt_write_ds_1.t_order_item_federate_sharding_0 (item_id INT 
NOT NULL, order_id INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, 
remarks VARCHAR(45) NULL, PRIMARY KEY (item_id));
 CREATE TABLE encrypt_write_ds_1.t_order_item_federate_sharding_1 (item_id INT 
NOT NULL, order_id INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, 
remarks VARCHAR(45) NULL, PRIMARY KEY (item_id));
+CREATE TABLE encrypt_write_ds_1.t_order_federate_sharding_0 (order_id_sharding 
INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, PRIMARY KEY 
(order_id_sharding));
+CREATE TABLE encrypt_write_ds_1.t_order_federate_sharding_1 (order_id_sharding 
INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, PRIMARY KEY 
(order_id_sharding));
 CREATE INDEX user_index_t_user_0 ON encrypt_write_ds_1.t_user_0 (user_id);
 CREATE INDEX user_index_t_user_1 ON encrypt_write_ds_1.t_user_1 (user_id);
 CREATE INDEX user_index_t_user_2 ON encrypt_write_ds_1.t_user_2 (user_id);
@@ -431,6 +433,8 @@ CREATE TABLE encrypt_read_ds_1.t_user_item_9 (item_id INT 
NOT NULL, user_id INT
 CREATE TABLE encrypt_read_ds_1.t_order_item_federate (item_id INT NOT NULL, 
order_id INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, PRIMARY 
KEY (item_id));
 CREATE TABLE encrypt_read_ds_1.t_order_item_federate_sharding_0 (item_id INT 
NOT NULL, order_id INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, 
remarks VARCHAR(45) NULL, PRIMARY KEY (item_id));
 CREATE TABLE encrypt_read_ds_1.t_order_item_federate_sharding_1 (item_id INT 
NOT NULL, order_id INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, 
remarks VARCHAR(45) NULL, PRIMARY KEY (item_id));
+CREATE TABLE encrypt_read_ds_1.t_order_federate_sharding_0 (order_id_sharding 
INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, PRIMARY KEY 
(order_id_sharding));
+CREATE TABLE encrypt_read_ds_1.t_order_federate_sharding_1 (order_id_sharding 
INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, PRIMARY KEY 
(order_id_sharding));
 CREATE INDEX user_index_t_user_0 ON encrypt_read_ds_1.t_user_0 (user_id);
 CREATE INDEX user_index_t_user_1 ON encrypt_read_ds_1.t_user_1 (user_id);
 CREATE INDEX user_index_t_user_2 ON encrypt_read_ds_1.t_user_2 (user_id);
diff --git 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/dbtbl_with_readwrite_splitting_and_encrypt/rules.yaml
 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/dbtbl_with_readwrite_splitting_and_encrypt/rules.yaml
index 04e32b7..e137b0c 100644
--- 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/dbtbl_with_readwrite_splitting_and_encrypt/rules.yaml
+++ 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/dbtbl_with_readwrite_splitting_and_encrypt/rules.yaml
@@ -60,6 +60,12 @@ rules:
         standard:
           shardingColumn: item_id
           shardingAlgorithmName: table_inline_item_id
+    t_order_federate_sharding:
+      actualDataNodes: pr_ds_1.t_order_federate_sharding_${0..1}
+      tableStrategy:
+        standard:
+          shardingColumn: order_id_sharding
+          shardingAlgorithmName: table_inline_order_id
   bindingTables:
     - t_user,t_user_item,t_user_details
 
@@ -70,11 +76,15 @@ rules:
       type: INLINE
       props:
         algorithm-expression: t_order_item_federate_sharding_${item_id % 2}
+    table_inline_order_id:
+      type: INLINE
+      props:
+        algorithm-expression: t_order_federate_sharding_${order_id_sharding % 
2}
 
   keyGenerators:
     constant:
       type: Constant
-      
+
 - !READWRITE_SPLITTING
   dataSources:
     pr_ds_0:
diff --git 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/tbl/dataset.xml
 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/tbl/dataset.xml
index 7b1616c..8174b8d 100644
--- 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/tbl/dataset.xml
+++ 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/tbl/dataset.xml
@@ -42,6 +42,13 @@
         <column name="user_id" type="numeric" />
         <column name="status" type="varchar" />
     </metadata>
+    <metadata data-nodes="tbl.t_order_item_federate_sharding_${0..1}">
+        <column name="item_id" type="numeric" />
+        <column name="order_id" type="numeric" />
+        <column name="user_id" type="numeric" />
+        <column name="status" type="varchar" />
+        <column name="remarks" type="varchar" />
+    </metadata>
     <row data-node="tbl.t_single_table" values="1, 1000, init" />
     <row data-node="tbl.t_single_table" values="2, 1001, init" />
     <row data-node="tbl.t_single_table" values="3, 1002, init" />
@@ -111,4 +118,8 @@
     <row data-node="tbl.t_order_federate_sharding_0" values="1100, 10, init" />
     <row data-node="tbl.t_order_federate_sharding_1" values="1011, 11, init" />
     <row data-node="tbl.t_order_federate_sharding_1" values="1101, 11, init" />
+    <row data-node="tbl.t_order_item_federate_sharding_0" values="1000, 10000, 
10, init, t_order_item_federate_sharding" />
+    <row data-node="tbl.t_order_item_federate_sharding_0" values="1010, 10001, 
10, init, t_order_item_federate_sharding" />
+    <row data-node="tbl.t_order_item_federate_sharding_1" values="1001, 10001, 
11, init, t_order_item_federate_sharding" />
+    <row data-node="tbl.t_order_item_federate_sharding_1" values="1011, 10001, 
10, init, t_order_item_federate_sharding" />
 </dataset>
diff --git 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/tbl/init-sql/h2/init.sql
 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/tbl/init-sql/h2/init.sql
index 42772f1..c4a444a 100644
--- 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/tbl/init-sql/h2/init.sql
+++ 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/tbl/init-sql/h2/init.sql
@@ -18,9 +18,11 @@
 DROP TABLE IF EXISTS t_order_0;
 DROP TABLE IF EXISTS t_order_item_0;
 DROP TABLE IF EXISTS t_order_federate_sharding_0;
+DROP TABLE IF EXISTS t_order_item_federate_sharding_0;
 DROP TABLE IF EXISTS t_order_1;
 DROP TABLE IF EXISTS t_order_item_1;
 DROP TABLE IF EXISTS t_order_federate_sharding_1;
+DROP TABLE IF EXISTS t_order_item_federate_sharding_1;
 DROP TABLE IF EXISTS t_order_2;
 DROP TABLE IF EXISTS t_order_item_2;
 DROP TABLE IF EXISTS t_order_3;
@@ -43,11 +45,13 @@ DROP TABLE IF EXISTS t_single_table;
 CREATE TABLE t_order_0 (order_id INT NOT NULL, user_id INT NOT NULL, status 
VARCHAR(45) NULL, PRIMARY KEY (order_id));
 CREATE TABLE t_order_item_0 (item_id INT NOT NULL, order_id INT NOT NULL, 
user_id INT NOT NULL, status VARCHAR(45) NULL, creation_date DATE, PRIMARY KEY 
(item_id));
 CREATE TABLE t_order_federate_sharding_0 (order_id_sharding INT NOT NULL, 
user_id INT NOT NULL, status VARCHAR(45) NULL, PRIMARY KEY (order_id_sharding));
+CREATE TABLE t_order_item_federate_sharding_0 (item_id INT NOT NULL, order_id 
INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, remarks 
VARCHAR(45) NULL, PRIMARY KEY (item_id));
 CREATE INDEX order_index_t_order_0 ON t_order_0 (order_id);
 
 CREATE TABLE t_order_1 (order_id INT NOT NULL, user_id INT NOT NULL, status 
VARCHAR(45) NULL, PRIMARY KEY (order_id));
 CREATE TABLE t_order_item_1 (item_id INT NOT NULL, order_id INT NOT NULL, 
user_id INT NOT NULL, status VARCHAR(45) NULL, creation_date DATE, PRIMARY KEY 
(item_id));
 CREATE TABLE t_order_federate_sharding_1 (order_id_sharding INT NOT NULL, 
user_id INT NOT NULL, status VARCHAR(45) NULL, PRIMARY KEY (order_id_sharding));
+CREATE TABLE t_order_item_federate_sharding_1 (item_id INT NOT NULL, order_id 
INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, remarks 
VARCHAR(45) NULL, PRIMARY KEY (item_id));
 CREATE INDEX order_index_t_order_1 ON t_order_1 (order_id);
 
 CREATE TABLE t_order_2 (order_id INT NOT NULL, user_id INT NOT NULL, status 
VARCHAR(45) NULL, PRIMARY KEY (order_id));
diff --git 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/tbl/init-sql/mysql/init.sql
 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/tbl/init-sql/mysql/init.sql
index c154dbf..8d6e00f 100644
--- 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/tbl/init-sql/mysql/init.sql
+++ 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/tbl/init-sql/mysql/init.sql
@@ -28,11 +28,13 @@ CREATE DATABASE tbl;
 CREATE TABLE tbl.t_order_0 (order_id INT NOT NULL, user_id INT NOT NULL, 
status VARCHAR(45) NULL, PRIMARY KEY (order_id));
 CREATE TABLE tbl.t_order_item_0 (item_id INT NOT NULL, order_id INT NOT NULL, 
user_id INT NOT NULL, status VARCHAR(45) NULL, creation_date DATE, PRIMARY KEY 
(item_id));
 CREATE TABLE tbl.t_order_federate_sharding_0 (order_id_sharding INT NOT NULL, 
user_id INT NOT NULL, status VARCHAR(45) NULL, PRIMARY KEY (order_id_sharding));
+CREATE TABLE tbl.t_order_item_federate_sharding_0 (item_id INT NOT NULL, 
order_id INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, remarks 
VARCHAR(45) NULL, PRIMARY KEY (item_id));
 CREATE INDEX order_index_t_order_0 ON tbl.t_order_0 (order_id);
 
 CREATE TABLE tbl.t_order_1 (order_id INT NOT NULL, user_id INT NOT NULL, 
status VARCHAR(45) NULL, PRIMARY KEY (order_id));
 CREATE TABLE tbl.t_order_item_1 (item_id INT NOT NULL, order_id INT NOT NULL, 
user_id INT NOT NULL, status VARCHAR(45) NULL, creation_date DATE, PRIMARY KEY 
(item_id));
 CREATE TABLE tbl.t_order_federate_sharding_1 (order_id_sharding INT NOT NULL, 
user_id INT NOT NULL, status VARCHAR(45) NULL, PRIMARY KEY (order_id_sharding));
+CREATE TABLE tbl.t_order_item_federate_sharding_1 (item_id INT NOT NULL, 
order_id INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, remarks 
VARCHAR(45) NULL, PRIMARY KEY (item_id));
 CREATE INDEX order_index_t_order_1 ON tbl.t_order_1 (order_id);
 
 CREATE TABLE tbl.t_order_2 (order_id INT NOT NULL, user_id INT NOT NULL, 
status VARCHAR(45) NULL, PRIMARY KEY (order_id));
diff --git 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/tbl/init-sql/oracle/init.sql
 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/tbl/init-sql/oracle/init.sql
index b40ecf0..c61f534 100644
--- 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/tbl/init-sql/oracle/init.sql
+++ 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/tbl/init-sql/oracle/init.sql
@@ -25,11 +25,13 @@ CREATE SCHEMA tbl;
 CREATE TABLE tbl.t_order_0 (order_id INT NOT NULL, user_id INT NOT NULL, 
status VARCHAR(45) NULL, PRIMARY KEY (order_id));
 CREATE TABLE tbl.t_order_item_0 (item_id INT NOT NULL, order_id INT NOT NULL, 
user_id INT NOT NULL, status VARCHAR(45) NULL, creation_date DATE, PRIMARY KEY 
(item_id));
 CREATE TABLE tbl.t_order_federate_sharding_0 (order_id_sharding INT NOT NULL, 
user_id INT NOT NULL, status VARCHAR(45) NULL, PRIMARY KEY (order_id_sharding));
+CREATE TABLE tbl.t_order_item_federate_sharding_0 (item_id INT NOT NULL, 
order_id INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, remarks 
VARCHAR(45) NULL, PRIMARY KEY (item_id));
 CREATE INDEX order_index_t_order_0 ON tbl.t_order_0 (order_id);
 
 CREATE TABLE tbl.t_order_1 (order_id INT NOT NULL, user_id INT NOT NULL, 
status VARCHAR(45) NULL, PRIMARY KEY (order_id));
 CREATE TABLE tbl.t_order_item_1 (item_id INT NOT NULL, order_id INT NOT NULL, 
user_id INT NOT NULL, status VARCHAR(45) NULL, creation_date DATE, PRIMARY KEY 
(item_id));
 CREATE TABLE tbl.t_order_federate_sharding_1 (order_id_sharding INT NOT NULL, 
user_id INT NOT NULL, status VARCHAR(45) NULL, PRIMARY KEY (order_id_sharding));
+CREATE TABLE tbl.t_order_item_federate_sharding_1 (item_id INT NOT NULL, 
order_id INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, remarks 
VARCHAR(45) NULL, PRIMARY KEY (item_id));
 CREATE INDEX order_index_t_order_1 ON tbl.t_order_1 (order_id);
 
 CREATE TABLE tbl.t_order_2 (order_id INT NOT NULL, user_id INT NOT NULL, 
status VARCHAR(45) NULL, PRIMARY KEY (order_id));
diff --git 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/tbl/init-sql/postgresql/init.sql
 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/tbl/init-sql/postgresql/init.sql
index 77ab375..0e89a77 100644
--- 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/tbl/init-sql/postgresql/init.sql
+++ 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/tbl/init-sql/postgresql/init.sql
@@ -23,8 +23,12 @@ GRANT ALL PRIVILEGES ON DATABASE tbl TO root;
 
 DROP TABLE IF EXISTS t_order_0;
 DROP TABLE IF EXISTS t_order_item_0;
+DROP TABLE IF EXISTS t_order_federate_sharding_0;
+DROP TABLE IF EXISTS t_order_item_federate_sharding_0;
 DROP TABLE IF EXISTS t_order_1;
 DROP TABLE IF EXISTS t_order_item_1;
+DROP TABLE IF EXISTS t_order_federate_sharding_1;
+DROP TABLE IF EXISTS t_order_item_federate_sharding_1;
 DROP TABLE IF EXISTS t_order_2;
 DROP TABLE IF EXISTS t_order_item_2;
 DROP TABLE IF EXISTS t_order_3;
@@ -47,11 +51,13 @@ DROP TABLE IF EXISTS t_single_table;
 CREATE TABLE t_order_0 (order_id INT NOT NULL, user_id INT NOT NULL, status 
VARCHAR(45) NULL, PRIMARY KEY (order_id));
 CREATE TABLE t_order_item_0 (item_id INT NOT NULL, order_id INT NOT NULL, 
user_id INT NOT NULL, status VARCHAR(45) NULL, creation_date DATE, PRIMARY KEY 
(item_id));
 CREATE TABLE t_order_federate_sharding_0 (order_id_sharding INT NOT NULL, 
user_id INT NOT NULL, status VARCHAR(45) NULL, PRIMARY KEY (order_id_sharding));
+CREATE TABLE t_order_item_federate_sharding_0 (item_id INT NOT NULL, order_id 
INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, remarks 
VARCHAR(45) NULL, PRIMARY KEY (item_id));
 CREATE INDEX order_index_t_order_0 ON t_order_0 (order_id);
 
 CREATE TABLE t_order_1 (order_id INT NOT NULL, user_id INT NOT NULL, status 
VARCHAR(45) NULL, PRIMARY KEY (order_id));
 CREATE TABLE t_order_item_1 (item_id INT NOT NULL, order_id INT NOT NULL, 
user_id INT NOT NULL, status VARCHAR(45) NULL, creation_date DATE, PRIMARY KEY 
(item_id));
 CREATE TABLE t_order_federate_sharding_1 (order_id_sharding INT NOT NULL, 
user_id INT NOT NULL, status VARCHAR(45) NULL, PRIMARY KEY (order_id_sharding));
+CREATE TABLE t_order_item_federate_sharding_1 (item_id INT NOT NULL, order_id 
INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, remarks 
VARCHAR(45) NULL, PRIMARY KEY (item_id));
 CREATE INDEX order_index_t_order_1 ON t_order_1 (order_id);
 
 CREATE TABLE t_order_2 (order_id INT NOT NULL, user_id INT NOT NULL, status 
VARCHAR(45) NULL, PRIMARY KEY (order_id));
diff --git 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/tbl/init-sql/sqlserver/init.sql
 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/tbl/init-sql/sqlserver/init.sql
index 1d8bb92..d181f33 100644
--- 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/tbl/init-sql/sqlserver/init.sql
+++ 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/tbl/init-sql/sqlserver/init.sql
@@ -25,11 +25,13 @@ CREATE DATABASE tbl;
 CREATE TABLE tbl.t_order_0 (order_id INT NOT NULL, user_id INT NOT NULL, 
status VARCHAR(45) NULL, PRIMARY KEY (order_id));
 CREATE TABLE tbl.t_order_item_0 (item_id INT NOT NULL, order_id INT NOT NULL, 
user_id INT NOT NULL, status VARCHAR(45) NULL, creation_date DATE, PRIMARY KEY 
(item_id));
 CREATE TABLE tbl.t_order_federate_sharding_0 (order_id_sharding INT NOT NULL, 
user_id INT NOT NULL, status VARCHAR(45) NULL, PRIMARY KEY (order_id_sharding));
+CREATE TABLE tbl.t_order_item_federate_sharding_0 (item_id INT NOT NULL, 
order_id INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, remarks 
VARCHAR(45) NULL, PRIMARY KEY (item_id));
 CREATE INDEX order_index_t_order_0 ON tbl.t_order_0 (order_id);
 
 CREATE TABLE tbl.t_order_1 (order_id INT NOT NULL, user_id INT NOT NULL, 
status VARCHAR(45) NULL, PRIMARY KEY (order_id));
 CREATE TABLE tbl.t_order_item_1 (item_id INT NOT NULL, order_id INT NOT NULL, 
user_id INT NOT NULL, status VARCHAR(45) NULL, creation_date DATE, PRIMARY KEY 
(item_id));
 CREATE TABLE tbl.t_order_federate_sharding_1 (order_id_sharding INT NOT NULL, 
user_id INT NOT NULL, status VARCHAR(45) NULL, PRIMARY KEY (order_id_sharding));
+CREATE TABLE tbl.t_order_item_federate_sharding_1 (item_id INT NOT NULL, 
order_id INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, remarks 
VARCHAR(45) NULL, PRIMARY KEY (item_id));
 CREATE INDEX order_index_t_order_1 ON tbl.t_order_1 (order_id);
 
 CREATE TABLE tbl.t_order_2 (order_id INT NOT NULL, user_id INT NOT NULL, 
status VARCHAR(45) NULL, PRIMARY KEY (order_id));
diff --git 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/tbl/rules.yaml
 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/tbl/rules.yaml
index a8b8ff8..ff402a2 100644
--- 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/tbl/rules.yaml
+++ 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/tbl/rules.yaml
@@ -45,6 +45,12 @@ rules:
         standard:
           shardingColumn: order_id_sharding
           shardingAlgorithmName: table_inline_order_id
+    t_order_item_federate_sharding:
+      actualDataNodes: tbl.t_order_item_federate_sharding_${0..1}
+      tableStrategy:
+        standard:
+          shardingColumn: item_id
+          shardingAlgorithmName: table_inline_item_id
   bindingTables:
     - t_order,t_order_item,t_order_details
   broadcastTables:
@@ -54,6 +60,10 @@ rules:
   shardingAlgorithms:
     standard_test:
       type: STANDARD_TEST
+    table_inline_item_id:
+      type: INLINE
+      props:
+        algorithm-expression: t_order_item_federate_sharding_${item_id % 2}
     table_inline_order_id:
       type: INLINE
       props:

Reply via email to