Task: equi-join-detect (source dataset: Auto-BI)

Your are given a database with related tables used for business intelligence analysis. Your task is to identify all key/foreign-key join relationships between the tables for this database. Recall that a join is a relationship between two tables, that allows rows from one table to be combined with rows from another, based on a set of common join columns.
 
 
No explanation needed. Please return all join relationships in the following JSON format:
{
  "joins": [
    {
      "from_table": "table-1",
      "from_column": "column-1",
      "to_table": "table-2",
      "to_column": "column-3"
    }, 
	...
  ]
}

Tables:

Table: Churn Time Frame
|   Churn Time Frame |
|-------------------:|
|                  0 |
|                 15 |
|                 30 |
|                 45 |
|                 60 |
|                 75 |
|                 90 |
|                105 |
|                120 |
|                135 |


Table: Customers
| Customer ID   | Customer Name   |
|:--------------|:----------------|
| C1000         | Jesse Evans     |
| C1001         | Victor Ramos    |
| C1002         | Mark Montgomery |
| C1003         | Dennis Morris   |
| C1004         | Gregory Simmons |
| C1005         | Jeremy Vasquez  |
| C1006         | Anthony Simpson |
| C1007         | Ernest Rivera   |
| C1008         | Victor Martinez |
| C1009         | Bobby Burton    |


Table: Dates
| Date                    |   Year |   QuarterOfYear |   MonthOfYear |   DayOfMonth |   DateInt | MonthName   | Month & Year   | Quarter & Year   |   DayInWeek | Day of Week   | WeekEnding              |   Week Number |   MonthnYear |   QuarternYear |   ShortYear | FY   | Year & Week   |   YearWeekSort | Quarters   |
|:------------------------|-------:|----------------:|--------------:|-------------:|----------:|:------------|:---------------|:-----------------|------------:|:--------------|:------------------------|--------------:|-------------:|---------------:|------------:|:-----|:--------------|---------------:|:-----------|
| 2015-07-01 00:00:00.000 |   2015 |               3 |             7 |            1 |  20150701 | July        | Jul 2015       | Q3 2015          |           3 | Wednesday     | 2015-07-04 00:00:00.000 |            27 |     20150700 |       20150300 |          15 | FY16 | 2015-27       |         201527 | Q3         |
| 2015-07-02 00:00:00.000 |   2015 |               3 |             7 |            2 |  20150702 | July        | Jul 2015       | Q3 2015          |           4 | Thursday      | 2015-07-04 00:00:00.000 |            27 |     20150700 |       20150300 |          15 | FY16 | 2015-27       |         201527 | Q3         |
| 2015-07-03 00:00:00.000 |   2015 |               3 |             7 |            3 |  20150703 | July        | Jul 2015       | Q3 2015          |           5 | Friday        | 2015-07-04 00:00:00.000 |            27 |     20150700 |       20150300 |          15 | FY16 | 2015-27       |         201527 | Q3         |
| 2015-07-04 00:00:00.000 |   2015 |               3 |             7 |            4 |  20150704 | July        | Jul 2015       | Q3 2015          |           6 | Saturday      | 2015-07-04 00:00:00.000 |            27 |     20150700 |       20150300 |          15 | FY16 | 2015-27       |         201527 | Q3         |
| 2015-07-05 00:00:00.000 |   2015 |               3 |             7 |            5 |  20150705 | July        | Jul 2015       | Q3 2015          |           0 | Sunday        | 2015-07-11 00:00:00.000 |            28 |     20150700 |       20150300 |          15 | FY16 | 2015-28       |         201528 | Q3         |
| 2015-07-06 00:00:00.000 |   2015 |               3 |             7 |            6 |  20150706 | July        | Jul 2015       | Q3 2015          |           1 | Monday        | 2015-07-11 00:00:00.000 |            28 |     20150700 |       20150300 |          15 | FY16 | 2015-28       |         201528 | Q3         |
| 2015-07-07 00:00:00.000 |   2015 |               3 |             7 |            7 |  20150707 | July        | Jul 2015       | Q3 2015          |           2 | Tuesday       | 2015-07-11 00:00:00.000 |            28 |     20150700 |       20150300 |          15 | FY16 | 2015-28       |         201528 | Q3         |
| 2015-07-08 00:00:00.000 |   2015 |               3 |             7 |            8 |  20150708 | July        | Jul 2015       | Q3 2015          |           3 | Wednesday     | 2015-07-11 00:00:00.000 |            28 |     20150700 |       20150300 |          15 | FY16 | 2015-28       |         201528 | Q3         |
| 2015-07-09 00:00:00.000 |   2015 |               3 |             7 |            9 |  20150709 | July        | Jul 2015       | Q3 2015          |           4 | Thursday      | 2015-07-11 00:00:00.000 |            28 |     20150700 |       20150300 |          15 | FY16 | 2015-28       |         201528 | Q3         |
| 2015-07-10 00:00:00.000 |   2015 |               3 |             7 |           10 |  20150710 | July        | Jul 2015       | Q3 2015          |           5 | Friday        | 2015-07-11 00:00:00.000 |            28 |     20150700 |       20150300 |          15 | FY16 | 2015-28       |         201528 | Q3         |


Table: Locations
| Location ID   | Name            | County           | State Code   | State       | Type   |   Latitude |   Longitude |   Area Code |   Population |   Households |   Median Income |   Land Area |   Water Area | Time Zone        |
|:--------------|:----------------|:-----------------|:-------------|:------------|:-------|-----------:|------------:|------------:|-------------:|-------------:|----------------:|------------:|-------------:|:-----------------|
| A100          | Bridgeport      | Fairfield County | CT           | Connecticut | City   |    41.167  |    -73.2048 |         203 |       147629 |        50367 |           41801 |    41591056 |      8721419 | America/New York |
| A102          | Hartford        | Hartford County  | CT           | Connecticut | City   |    41.7637 |    -72.6851 |         959 |       124006 |        45239 |           30630 |    45016120 |      1748078 | America/New York |
| A104          | New Haven       | New Haven County | CT           | Connecticut | City   |    41.3081 |    -72.9282 |         203 |       130322 |        49771 |           37192 |    48407373 |      3739487 | America/New York |
| A106          | Stamford        | Fairfield County | CT           | Connecticut | City   |    41.0534 |    -73.5387 |         203 |       128874 |        46974 |           79359 |    97430571 |     37323740 | America/New York |
| A108          | Waterbury       | New Haven County | CT           | Connecticut | City   |    41.5581 |    -73.0515 |         203 |       108802 |        40213 |           40467 |    73880017 |      1086045 | America/New York |
| A111          | Cape Coral      | Lee County       | FL           | Florida     | City   |    26.5629 |    -81.9495 |         941 |       175229 |        58967 |           50536 |   273544395 |     35010453 | America/New York |
| A112          | Clearwater      | Pinellas County  | FL           | Florida     | City   |    27.979  |    -82.7666 |         727 |       113003 |        46234 |           44198 |    67027321 |     36469162 | America/New York |
| A113          | Coral Springs   | Broward County   | FL           | Florida     | City   |    26.2712 |    -80.2706 |         954 |       129485 |        40571 |           66430 |    61625913 |       520928 | America/New York |
| A115          | Fort Lauderdale | Broward County   | FL           | Florida     | City   |    26.1223 |    -80.1434 |         954 |       178590 |        73446 |           50778 |    89672308 |      4372775 | America/New York |
| A116          | Gainesville     | Alachua County   | FL           | Florida     | City   |    29.6516 |    -82.3248 |         352 |       130128 |        47968 |           31818 |   161411152 |      3017660 | America/New York |


Table: Outlier Detection Logic
| Grouping    |   Profits Margins Min |   Profit Margins Max |   Total Sales Min |   Total Sales Max |
|:------------|----------------------:|---------------------:|------------------:|------------------:|
| Outlier     |                   0.3 |                  1   |             10000 |            500000 |
| Non-Outlier |                   0   |                  0.3 |                 0 |             10000 |


Table: Products
| Product ID   | Product Name   |   Cost |   Original Sale Price | Discount Code   |   Discount |   Current Price |   Taxes | Product Groups   |
|:-------------|:---------------|-------:|----------------------:|:----------------|-----------:|----------------:|--------:|:-----------------|
| ENX2000      | Product 1      |   1367 |                  2241 |                 |          0 |            2241 |  336.15 | High Price       |
| ENX2001      | Product 2      |    504 |                   951 |                 |          0 |             951 |  142.65 | Low Price        |
| ENX2002      | Product 3      |    534 |                   847 |                 |          0 |             847 |  127.05 | Low Price        |
| ENX2003      | Product 4      |   1516 |                  1783 |                 |          0 |            1783 |  267.45 | Mid Range        |
| ENX2004      | Product 5      |    665 |                  1278 |                 |          0 |            1278 |  191.7  | Mid Range        |
| ENX2005      | Product 6      |    561 |                   684 |                 |          0 |             684 |  102.6  | Low Price        |
| ENX2006      | Product 7      |   1443 |                  1826 |                 |          0 |            1826 |  273.9  | Mid Range        |
| ENX2007      | Product 8      |   1054 |                  1405 |                 |          0 |            1405 |  210.75 | Mid Range        |
| ENX2008      | Product 9      |    208 |                   315 |                 |          0 |             315 |   47.25 | Low Price        |
| ENX2009      | Product 10     |    420 |                   584 |                 |          0 |             584 |   87.6  | Low Price        |


Table: Sales
| Order ID   | Product ID   | Location ID   | Sales Person ID   | Customer ID   | Purchase Date           |   Quantity |
|:-----------|:-------------|:--------------|:------------------|:--------------|:------------------------|-----------:|
| AX10030    | ENX2028      | A124          | EMP1017           | C1495         | 2017-06-22 00:00:00.000 |          1 |
| AX10091    | ENX2051      | A149          | EMP1017           | C1707         | 2018-04-18 00:00:00.000 |          1 |
| AX10237    | ENX2080      | A169          | EMP1017           | C1578         | 2019-04-10 00:00:00.000 |          1 |
| AX10370    | ENX2011      | A131          | EMP1017           | C1419         | 2016-11-24 00:00:00.000 |          1 |
| AX10395    | ENX2085      | A109          | EMP1017           | C1402         | 2019-06-17 00:00:00.000 |          1 |
| AX10413    | ENX2000      | A137          | EMP1017           | C1345         | 2016-07-06 00:00:00.000 |          1 |
| AX10488    | ENX2028      | A175          | EMP1017           | C1169         | 2017-06-27 00:00:00.000 |          1 |
| AX10534    | ENX2077      | A193          | EMP1017           | C1479         | 2019-03-12 00:00:00.000 |          1 |
| AX10545    | ENX2079      | A128          | EMP1017           | C1695         | 2019-04-08 00:00:00.000 |          1 |
| AX10556    | ENX2097      | A101          | EMP1017           | C1010         | 2019-11-15 00:00:00.000 |          1 |


Table: Salespeople
| Salesperson ID   | Salesperson Name   |
|:-----------------|:-------------------|
| EMP1000          | Fred Robertson     |
| EMP1001          | Kevin Butler       |
| EMP1002          | Andrew Bowman      |
| EMP1003          | Christopher Tucker |
| EMP1004          | Kenneth Bradley    |
| EMP1005          | Ryan Welch         |
| EMP1006          | Sean Miller        |
| EMP1007          | Jeremy Mendoza     |
| EMP1008          | Carl Elliott       |
| EMP1009          | Kenneth Fields     |

 


tables: name: Churn Time Frame
data: Churn Time Frame.csv
name: Customers
data: Customers.csv
name: Dates
data: Dates.csv
name: Locations
data: Locations.csv
name: Outlier Detection Logic
data: Outlier Detection Logic.csv
name: Products
data: Products.csv
name: Sales
data: Sales.csv
name: Salespeople
data: Salespeople.csv
label: Sales
Customer ID
Customers
Customer ID
Sales
Location ID
Locations
Location ID
Sales
Product ID
Products
Product ID
Sales
Sales Person ID
Salespeople
Salesperson ID
Sales
Purchase Date
Dates
Date
output: {
    "joins": [
        {
            "from_table": "Sales",
            "from_column": "Customer ID",
            "to_table": "Customers",
            "to_column": "Customer ID"
        },
        {
            "from_table": "Sales",
            "from_column": "Location ID",
            "to_table": "Locations",
            "to_column": "Location ID"
        },
        {
            "from_table": "Sales",
            "from_column": "Product ID",
            "to_table": "Products",
            "to_column": "Product ID"
        },
        {
            "from_table": "Sales",
            "from_column": "Sales Person ID",
            "to_table": "Salespeople",
            "to_column": "Salesperson ID"
        },
        {
            "from_table": "Sales",
            "from_column": "Purchase Date",
            "to_table": "Dates",
            "to_column": "Date"
        }
    ]
}