Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 

Enhance your career with this limited time 50% discount on Fabric and Power BI exams. Ends August 31st. Request your voucher.

Reply
emohammad
Frequent Visitor

Merge two table with two columns OR condition

Hi,
I need to merge two tables with two columns using an OR condition on a power query. Below are the two sample tables and expected results. 
Can anyone suggest a way to perform a similar SQL query in the power query? 
 
select * from 
test1 t1
full join test2 t2
on t1.Employee_Id=t2.Employee_Id OR t1.Email=t2.Email
 
test1
Employee_IdEmailDepartmentCityManager
22221abc@gmail.comDept1City1Manager1
22222cdf@gmail.comDept1City1Manager1
22223 Dept1City2Manager1
22224jkl@gmail.comDept2City2Manager2
22225mno@gmail.comDept2City2Manager2
22226pqr@gmail.comDept2City3Manager3
22227stu@gmail.comDept2City3Manager3

 

test2
Employee_IdEmailGradeExpertiseQualification
22221abc@gmail.comGrade1Expertise1Qualification1
 cdf@gmail.comGrade1Expertise1Qualification1
22223ghi@gmail.comGrade1Expertise2Qualification1
22224 Grade2Expertise2Qualification2
22225mno@gmail.comGrade2Expertise3Qualification3
22226pqr@gmail.comGrade3Expertise3Qualification3
22227stu@gmail.comGrade3Expertise4Qualification3

 

 

Final Result
EMPLOYEE_IDEMAILDEPARTMENTCITYMANAGEREMPLOYEE_IDEMAILGRADEEXPERTISEQUALIFICATION
22221abc@gmail.comDept1City1Manager122221abc@gmail.comGrade1Expertise1Qualification1
22222cdf@gmail.comDept1City1Manager1 cdf@gmail.comGrade1Expertise1Qualification1
22223 Dept1City2Manager122223ghi@gmail.comGrade1Expertise2Qualification1
22224jkl@gmail.comDept2City2Manager222224 Grade2Expertise2Qualification2
22225mno@gmail.comDept2City2Manager222225mno@gmail.comGrade2Expertise3Qualification3
22226pqr@gmail.comDept2City3Manager322226pqr@gmail.comGrade3Expertise3Qualification3
22227stu@gmail.comDept2City3Manager322227stu@gmail.comGrade3Expertise4Qualification3
test1.pngtest2.pngFinal result.png
1 ACCEPTED SOLUTION
Anonymous
Not applicable

Hi @emohammad ,

 

Please try:

let
    test1 = #table(
        {"Employee_Id", "Email", "Department", "City", "Manager"},
        {
            {22221, "abc@gmail.com", "Dept1", "City1", "Manager1"},
            {22222, "cdf@gmail.com", "Dept1", "City1", "Manager1"},
            {22223, null, "Dept1", "City2", "Manager1"},
            {22224, "jkl@gmail.com", "Dept2", "City2", "Manager2"},
            {22225, "mno@gmail.com", "Dept2", "City2", "Manager2"},
            {22226, "pqr@gmail.com", "Dept2", "City3", "Manager3"},
            {22227, "stu@gmail.com", "Dept2", "City3", "Manager3"}
        }
    ),
    test2 = #table(
        {"Employee_Id", "Email", "Grade", "Expertise", "Qualification"},
        {
            {22221, "abc@gmail.com", "Grade1", "Expertise1", "Qualification1"},
            {null, "cdf@gmail.com", "Grade1", "Expertise1", "Qualification1"},
            {22223, "ghi@gmail.com", "Grade1", "Expertise2", "Qualification1"},
            {22224, null, "Grade2", "Expertise2", "Qualification2"},
            {22225, "mno@gmail.com", "Grade2", "Expertise3", "Qualification3"},
            {22226, "pqr@gmail.com", "Grade3", "Expertise3", "Qualification3"},
            {22227, "stu@gmail.com", "Grade3", "Expertise4", "Qualification3"}
        }
    ),
    MergedTables = Table.NestedJoin(test1, {"Employee_Id"}, test2, {"Employee_Id"}, "test2", JoinKind.LeftOuter),
    ExpandedTable = Table.ExpandTableColumn(MergedTables, "test2", {"Email"}, {"test2_Email"}),
    AddedColumn = Table.AddColumn(ExpandedTable, "Table1ID", each if [Email] = null then [test2_Email] else [Email]),
    MergedTables2 = Table.NestedJoin(test2, {"Employee_Id"}, test1, {"Employee_Id"}, "test1", JoinKind.LeftOuter),
    ExpandedTable2 = Table.ExpandTableColumn(MergedTables2, "test1", {"Email"}, {"test1_Email"}),
    AddedColumn2 = Table.AddColumn(ExpandedTable2, "Table2ID", each if [Email] = null then [test1_Email] else [Email]),
    JoinTables=Table.NestedJoin(AddedColumn,{"Table1ID"},AddedColumn2,{"Table2ID"},"NewTest2",JoinKind.FullOuter),
    #"Expanded NewTest2" = Table.ExpandTableColumn(JoinTables, "NewTest2", {"Employee_Id","Email","Grade", "Expertise", "Qualification"}, {"Test2.Employee_Id","Test2.Email","Grade", "Expertise", "Qualification"}),
    RemoveColumns = Table.RemoveColumns(#"Expanded NewTest2",{"test2_Email","Table1ID"}),
    #"Sorted Rows" = Table.Sort(RemoveColumns,{{"Employee_Id", Order.Ascending}})
in
    #"Sorted Rows"

vbofengmsft_0-1732243603170.png

Best Regards,

Bof

View solution in original post

6 REPLIES 6
wdx223_Daniel
Super User
Super User

wdx223_Daniel_0-1732086313855.png

 

Anonymous
Not applicable

Hi @emohammad ,

 

Since a table cannot have duplicate column names, I have merged the two tables based on your conditions and filled in the missing Employee_ID and Email. I have also removed the duplicate columns in the final result.

Please try:

let
    test1 = #table(
        {"Employee_Id", "Email", "Department", "City", "Manager"},
        {
            {22221, "abc@gmail.com", "Dept1", "City1", "Manager1"},
            {22222, "cdf@gmail.com", "Dept1", "City1", "Manager1"},
            {22223, null, "Dept1", "City2", "Manager1"},
            {22224, "jkl@gmail.com", "Dept2", "City2", "Manager2"},
            {22225, "mno@gmail.com", "Dept2", "City2", "Manager2"},
            {22226, "pqr@gmail.com", "Dept2", "City3", "Manager3"},
            {22227, "stu@gmail.com", "Dept2", "City3", "Manager3"}
        }
    ),
    test2 = #table(
        {"Employee_Id", "Email", "Grade", "Expertise", "Qualification"},
        {
            {22221, "abc@gmail.com", "Grade1", "Expertise1", "Qualification1"},
            {null, "cdf@gmail.com", "Grade1", "Expertise1", "Qualification1"},
            {22223, "ghi@gmail.com", "Grade1", "Expertise2", "Qualification1"},
            {22224, null, "Grade2", "Expertise2", "Qualification2"},
            {22225, "mno@gmail.com", "Grade2", "Expertise3", "Qualification3"},
            {22226, "pqr@gmail.com", "Grade3", "Expertise3", "Qualification3"},
            {22227, "stu@gmail.com", "Grade3", "Expertise4", "Qualification3"}
        }
    ),
    MergedTables = Table.NestedJoin(test1, {"Employee_Id"}, test2, {"Employee_Id"}, "test2", JoinKind.LeftOuter),
    ExpandedTable = Table.ExpandTableColumn(MergedTables, "test2", {"Email"}, {"test2_Email"}),
    AddedColumn = Table.AddColumn(ExpandedTable, "Filled_Email", each if [Email] = null then [test2_Email] else [Email]),
    NewTest1 = Table.RemoveColumns(AddedColumn, {"Email", "test2_Email"}),
    MergedTables2 = Table.NestedJoin(test2, {"Employee_Id"}, test1, {"Employee_Id"}, "test1", JoinKind.LeftOuter),
    ExpandedTable2 = Table.ExpandTableColumn(MergedTables2, "test1", {"Email"}, {"test1_Email"}),
    AddedColumn2 = Table.AddColumn(ExpandedTable2, "Filled_Email", each if [Email] = null then [test1_Email] else [Email]),
    NewTest2 = Table.RemoveColumns(AddedColumn2, {"Email", "test1_Email"}),
    JoinTables=Table.NestedJoin(NewTest1,{"Filled_Email"},NewTest2,{"Filled_Email"},"NewTest2",JoinKind.FullOuter),
    #"Expanded NewTest2" = Table.ExpandTableColumn(JoinTables, "NewTest2", {"Grade", "Expertise", "Qualification"}, {"Grade", "Expertise", "Qualification"}),
    #"Renamed Columns" = Table.RenameColumns(#"Expanded NewTest2",{{"Filled_Email", "Email"}}),
    #"Sorted Rows" = Table.Sort(#"Renamed Columns",{{"Employee_Id", Order.Ascending}}),
    #"Reordered Columns" = Table.ReorderColumns(#"Sorted Rows",{"Employee_Id", "Email", "Department", "City", "Manager", "Grade", "Expertise", "Qualification"})
in
    #"Reordered Columns"

vbofengmsft_0-1732084931376.png

 

 

Best Regards,

Bof

@Anonymous,

Thanks for your help. Can you please modify the above code to get the same result as shown in the final result table? Please show the duplicate columns and I want to see the gaps to highlight them in the reports.

 

 

Note:

Anonymous
Not applicable

Hi @emohammad ,

 

Please try:

let
    test1 = #table(
        {"Employee_Id", "Email", "Department", "City", "Manager"},
        {
            {22221, "abc@gmail.com", "Dept1", "City1", "Manager1"},
            {22222, "cdf@gmail.com", "Dept1", "City1", "Manager1"},
            {22223, null, "Dept1", "City2", "Manager1"},
            {22224, "jkl@gmail.com", "Dept2", "City2", "Manager2"},
            {22225, "mno@gmail.com", "Dept2", "City2", "Manager2"},
            {22226, "pqr@gmail.com", "Dept2", "City3", "Manager3"},
            {22227, "stu@gmail.com", "Dept2", "City3", "Manager3"}
        }
    ),
    test2 = #table(
        {"Employee_Id", "Email", "Grade", "Expertise", "Qualification"},
        {
            {22221, "abc@gmail.com", "Grade1", "Expertise1", "Qualification1"},
            {null, "cdf@gmail.com", "Grade1", "Expertise1", "Qualification1"},
            {22223, "ghi@gmail.com", "Grade1", "Expertise2", "Qualification1"},
            {22224, null, "Grade2", "Expertise2", "Qualification2"},
            {22225, "mno@gmail.com", "Grade2", "Expertise3", "Qualification3"},
            {22226, "pqr@gmail.com", "Grade3", "Expertise3", "Qualification3"},
            {22227, "stu@gmail.com", "Grade3", "Expertise4", "Qualification3"}
        }
    ),
    MergedTables = Table.NestedJoin(test1, {"Employee_Id"}, test2, {"Employee_Id"}, "test2", JoinKind.LeftOuter),
    ExpandedTable = Table.ExpandTableColumn(MergedTables, "test2", {"Email"}, {"test2_Email"}),
    AddedColumn = Table.AddColumn(ExpandedTable, "Table1ID", each if [Email] = null then [test2_Email] else [Email]),
    MergedTables2 = Table.NestedJoin(test2, {"Employee_Id"}, test1, {"Employee_Id"}, "test1", JoinKind.LeftOuter),
    ExpandedTable2 = Table.ExpandTableColumn(MergedTables2, "test1", {"Email"}, {"test1_Email"}),
    AddedColumn2 = Table.AddColumn(ExpandedTable2, "Table2ID", each if [Email] = null then [test1_Email] else [Email]),
    JoinTables=Table.NestedJoin(AddedColumn,{"Table1ID"},AddedColumn2,{"Table2ID"},"NewTest2",JoinKind.FullOuter),
    #"Expanded NewTest2" = Table.ExpandTableColumn(JoinTables, "NewTest2", {"Employee_Id","Email","Grade", "Expertise", "Qualification"}, {"Test2.Employee_Id","Test2.Email","Grade", "Expertise", "Qualification"}),
    RemoveColumns = Table.RemoveColumns(#"Expanded NewTest2",{"test2_Email","Table1ID"}),
    #"Sorted Rows" = Table.Sort(RemoveColumns,{{"Employee_Id", Order.Ascending}})
in
    #"Sorted Rows"

vbofengmsft_0-1732243603170.png

Best Regards,

Bof

Thanks, @v-bofeng-msft. This worked.

If thare are nulls in the test1.Employee_Id, I need to add a step to remove duplicates. 

Omid_Motamedise
Super User
Super User

Just apply two seperate merges for each column and then combine the results

If my answer helped solve your issue, please consider marking it as the accepted solution. It helps others in the community find answers faster—and keeps the community growing stronger!
You can also check out my YouTube channel for tutorials, tips, and real-world solutions in Power Query with the following link
https://youtube.com/@omidbi?si=96Bo-ZsSwOx0Z36h

Helpful resources

Announcements
August Power BI Update Carousel

Power BI Monthly Update - August 2025

Check out the August 2025 Power BI update to learn about new features.

August 2025 community update carousel

Fabric Community Update - August 2025

Find out what's new and trending in the Fabric community.

Top Solution Authors